aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/inode.c
diff options
context:
space:
mode:
authorChris Mason <chris.mason@oracle.com>2009-09-02 15:22:30 -0400
committerChris Mason <chris.mason@oracle.com>2009-09-11 13:31:07 -0400
commit9655d2982b53fdb38a9e0f2f11315b99b92d66e2 (patch)
treee1271f2f2a3c2c356e0692b36a2d4742b5d651d8 /fs/btrfs/inode.c
parentd5550c6315fe0647b7ac21a6a736bf4a42620eac (diff)
Btrfs: use a cached state for extent state operations during delalloc
This changes the btrfs code to find delalloc ranges in the extent state tree to use the new state caching code from set/test bit. It reduces one of the biggest causes of rbtree searches in the writeback path. test_range_bit is also modified to take the cached state as a starting point while searching. Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs/inode.c')
-rw-r--r--fs/btrfs/inode.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index e494545c4202..3f8e93de2989 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -1376,7 +1376,7 @@ again:
1376 1376
1377 /* already ordered? We're done */ 1377 /* already ordered? We're done */
1378 if (test_range_bit(&BTRFS_I(inode)->io_tree, page_start, page_end, 1378 if (test_range_bit(&BTRFS_I(inode)->io_tree, page_start, page_end,
1379 EXTENT_ORDERED, 0)) { 1379 EXTENT_ORDERED, 0, NULL)) {
1380 goto out; 1380 goto out;
1381 } 1381 }
1382 1382
@@ -1417,7 +1417,7 @@ static int btrfs_writepage_start_hook(struct page *page, u64 start, u64 end)
1417 int ret; 1417 int ret;
1418 1418
1419 ret = test_range_bit(&BTRFS_I(inode)->io_tree, start, end, 1419 ret = test_range_bit(&BTRFS_I(inode)->io_tree, start, end,
1420 EXTENT_ORDERED, 0); 1420 EXTENT_ORDERED, 0, NULL);
1421 if (ret) 1421 if (ret)
1422 return 0; 1422 return 0;
1423 1423
@@ -1795,7 +1795,7 @@ static int btrfs_readpage_end_io_hook(struct page *page, u64 start, u64 end,
1795 return 0; 1795 return 0;
1796 1796
1797 if (root->root_key.objectid == BTRFS_DATA_RELOC_TREE_OBJECTID && 1797 if (root->root_key.objectid == BTRFS_DATA_RELOC_TREE_OBJECTID &&
1798 test_range_bit(io_tree, start, end, EXTENT_NODATASUM, 1)) { 1798 test_range_bit(io_tree, start, end, EXTENT_NODATASUM, 1, NULL)) {
1799 clear_extent_bits(io_tree, start, end, EXTENT_NODATASUM, 1799 clear_extent_bits(io_tree, start, end, EXTENT_NODATASUM,
1800 GFP_NOFS); 1800 GFP_NOFS);
1801 return 0; 1801 return 0;