提交 105d931d 编写于 作者: C Chris Mason

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: NChris Mason <chris.mason@oracle.com>
上级 73e9f5be
......@@ -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();
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册