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>
This commit is contained in:
Chris Mason 2008-11-18 12:13:12 -05:00
parent 73e9f5beb1
commit 105d931d48

View File

@ -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();
}