summaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorChris Mason <chris.mason@oracle.com>2008-11-18 12:13:12 -0500
committerChris Mason <chris.mason@oracle.com>2008-11-18 12:13:12 -0500
commit105d931d482b7d1b1b2dd4b0ea30365db8630b9f (patch)
treee3c8ba5bc5cb5fcbf6ac33b08c701e1e8cdabf10 /fs
parent73e9f5beb16f568f797bba87f082556fac18dede (diff)
downloadlinux-105d931d482b7d1b1b2dd4b0ea30365db8630b9f.tar.gz
linux-105d931d482b7d1b1b2dd4b0ea30365db8630b9f.tar.bz2
linux-105d931d482b7d1b1b2dd4b0ea30365db8630b9f.zip
Btrfs: switch back to wait_on_page_writeback to wait on metadata writes
The extent based waiting was using more CPU, and other fixes have helped with the unplug storm problems. Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs')
-rw-r--r--fs/btrfs/transaction.c29
1 files changed, 1 insertions, 28 deletions
diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c
index e9c8ebeedd7e..c2c3b4281962 100644
--- a/fs/btrfs/transaction.c
+++ b/fs/btrfs/transaction.c
@@ -332,7 +332,6 @@ int btrfs_write_and_wait_marked_extents(struct btrfs_root *root,
int werr = 0;
struct page *page;
struct inode *btree_inode = root->fs_info->btree_inode;
- struct extent_io_tree *io_tree = &BTRFS_I(btree_inode)->io_tree;
u64 start = 0;
u64 end;
unsigned long index;
@@ -373,11 +372,6 @@ int btrfs_write_and_wait_marked_extents(struct btrfs_root *root,
page_cache_release(page);
}
}
- /*
- * we unplug once and then use the wait_on_extent_bit for
- * everything else
- */
- blk_run_address_space(btree_inode->i_mapping);
while(1) {
ret = find_first_extent_bit(dirty_pages, 0, &start, &end,
EXTENT_DIRTY);
@@ -398,28 +392,7 @@ int btrfs_write_and_wait_marked_extents(struct btrfs_root *root,
if (err)
werr = err;
}
- if (PageWriteback(page)) {
- /*
- * we don't wait on the page writeback bit
- * because that triggers a lot of unplugs.
- * The extent bits are much nicer to
- * the disks, but come with a slightly
- * higher latency because we aren't forcing
- * unplugs.
- */
- wait_on_extent_writeback(io_tree,
- page_offset(page),
- page_offset(page) +
- PAGE_CACHE_SIZE - 1);
- }
- if (PageWriteback(page)) {
- /*
- * the state bits get cleared before the
- * page bits, lets add some extra
- * paranoia here
- */
- wait_on_page_writeback(page);
- }
+ wait_on_page_writeback(page);
page_cache_release(page);
cond_resched();
}