Btrfs: switch back to wait_on_page_writeback to wait on metadata writes
authorChris Mason <chris.mason@oracle.com>
Tue, 18 Nov 2008 17:13:12 +0000 (12:13 -0500)
committerChris Mason <chris.mason@oracle.com>
Tue, 18 Nov 2008 17:13:12 +0000 (12:13 -0500)
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>
fs/btrfs/transaction.c

index e9c8ebeedd7ee876da479a73e42d28e64e22ff5d..c2c3b42819624dae158ee1f0d932650449b54761 100644 (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();
                }