From e1dab7690e1b10be3cc280fa6693e2374728c740 Mon Sep 17 00:00:00 2001 From: Chris Mason Date: Fri, 18 Jul 2008 11:56:15 -0400 Subject: [PATCH] --- yaml --- r: 128831 b: refs/heads/master c: 211f90e68b679d27fe23c5505f86d6ce62c98bae h: refs/heads/master i: 128829: 3e20ad8835386ba9956f4c574133a9741a091ce6 128827: eda4bedc222a22192c7263e19f4848c55b824c01 128823: 94b44c298d7914a8852f27c78c387bdddcc57728 128815: 628a8fe77ba85cc69ff0fb0df4b98cc1a6c512f6 128799: dc10fcbc254396e873bfad341f9b012c90ffbe52 128767: b5be283968253d1d482a849afc0e118f80718d22 v: v3 --- [refs] | 2 +- trunk/fs/btrfs/extent_io.c | 3 ++- trunk/fs/btrfs/inode.c | 14 +++++++++----- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/[refs] b/[refs] index 88d034d5fead..18a2a7ef21ee 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 3edf7d33f4edb1e4a9bb0a4c0a84d95fb4d22a09 +refs/heads/master: 211f90e68b679d27fe23c5505f86d6ce62c98bae diff --git a/trunk/fs/btrfs/extent_io.c b/trunk/fs/btrfs/extent_io.c index feff16cb9b40..3153b4fdd0b3 100644 --- a/trunk/fs/btrfs/extent_io.c +++ b/trunk/fs/btrfs/extent_io.c @@ -2542,7 +2542,8 @@ int try_release_extent_state(struct extent_map_tree *map, u64 end = start + PAGE_CACHE_SIZE - 1; int ret = 1; - if (test_range_bit(tree, start, end, EXTENT_IOBITS, 0)) + if (test_range_bit(tree, start, end, + EXTENT_IOBITS | EXTENT_ORDERED, 0)) ret = 0; else { if ((mask & GFP_NOFS) == GFP_NOFS) diff --git a/trunk/fs/btrfs/inode.c b/trunk/fs/btrfs/inode.c index 4d729d90d2b8..8803abc89bb8 100644 --- a/trunk/fs/btrfs/inode.c +++ b/trunk/fs/btrfs/inode.c @@ -477,10 +477,8 @@ printk("queueing worker to fixup page %lu %Lu\n", inode->i_ino, page_offset(page return -EAGAIN; } -int btrfs_writepage_end_io_hook(struct page *page, u64 start, u64 end, - struct extent_state *state, int uptodate) +static int btrfs_finish_ordered_io(struct inode *inode, u64 start, u64 end) { - struct inode *inode = page->mapping->host; struct btrfs_root *root = BTRFS_I(inode)->root; struct btrfs_trans_handle *trans; struct btrfs_ordered_extent *ordered_extent; @@ -550,6 +548,12 @@ int btrfs_writepage_end_io_hook(struct page *page, u64 start, u64 end, return 0; } +int btrfs_writepage_end_io_hook(struct page *page, u64 start, u64 end, + struct extent_state *state, int uptodate) +{ + return btrfs_finish_ordered_io(page->mapping->host, start, end); +} + int btrfs_readpage_io_hook(struct page *page, u64 start, u64 end) { int ret = 0; @@ -2663,8 +2667,8 @@ static void btrfs_invalidatepage(struct page *page, unsigned long offset) clear_extent_bit(tree, page_start, page_end, EXTENT_DIRTY | EXTENT_DELALLOC | EXTENT_LOCKED, 1, 0, GFP_NOFS); - btrfs_writepage_end_io_hook(page, page_start, - page_end, NULL, 1); + btrfs_finish_ordered_io(page->mapping->host, + page_start, page_end); btrfs_put_ordered_extent(ordered); lock_extent(tree, page_start, page_end, GFP_NOFS); }