aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/extent_io.h
diff options
context:
space:
mode:
authorChris Mason <chris.mason@oracle.com>2009-09-02 15:04:12 -0400
committerChris Mason <chris.mason@oracle.com>2009-09-11 13:31:06 -0400
commit2c64c53d8d30d43d0670482503a3914dfd3d6d46 (patch)
treecfe7bfa8f5dc4078f8c995f305229622e25572b1 /fs/btrfs/extent_io.h
parent1edbb734b4e010974c41d2859d22a43d04f5f1cf (diff)
Btrfs: cache values for locking extents
Many of the btrfs extent state tree users follow the same pattern. They lock an extent range in the tree, do some operation and then unlock. This translates to at least 2 rbtree searches, and maybe more if they are doing operations on the extent state tree. A locked extent in the tree isn't going to be merged or changed, and so we can safely return the extent state structure as a cached handle. This changes set_extent_bit to give back a cached handle, and also changes both set_extent_bit and clear_extent_bit to use the cached handle if it is available. Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs/extent_io.h')
-rw-r--r--fs/btrfs/extent_io.h5
1 files changed, 3 insertions, 2 deletions
diff --git a/fs/btrfs/extent_io.h b/fs/btrfs/extent_io.h
index 88d134d01fbc..c8ead2b8c4c9 100644
--- a/fs/btrfs/extent_io.h
+++ b/fs/btrfs/extent_io.h
@@ -143,7 +143,7 @@ int try_release_extent_state(struct extent_map_tree *map,
143 gfp_t mask); 143 gfp_t mask);
144int lock_extent(struct extent_io_tree *tree, u64 start, u64 end, gfp_t mask); 144int lock_extent(struct extent_io_tree *tree, u64 start, u64 end, gfp_t mask);
145int lock_extent_bits(struct extent_io_tree *tree, u64 start, u64 end, 145int lock_extent_bits(struct extent_io_tree *tree, u64 start, u64 end,
146 int bits, gfp_t mask); 146 int bits, struct extent_state **cached, gfp_t mask);
147int unlock_extent(struct extent_io_tree *tree, u64 start, u64 end, gfp_t mask); 147int unlock_extent(struct extent_io_tree *tree, u64 start, u64 end, gfp_t mask);
148int try_lock_extent(struct extent_io_tree *tree, u64 start, u64 end, 148int try_lock_extent(struct extent_io_tree *tree, u64 start, u64 end,
149 gfp_t mask); 149 gfp_t mask);
@@ -161,7 +161,8 @@ int test_range_bit(struct extent_io_tree *tree, u64 start, u64 end,
161int clear_extent_bits(struct extent_io_tree *tree, u64 start, u64 end, 161int clear_extent_bits(struct extent_io_tree *tree, u64 start, u64 end,
162 int bits, gfp_t mask); 162 int bits, gfp_t mask);
163int clear_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, 163int clear_extent_bit(struct extent_io_tree *tree, u64 start, u64 end,
164 int bits, int wake, int delete, gfp_t mask); 164 int bits, int wake, int delete, struct extent_state **cached,
165 gfp_t mask);
165int set_extent_bits(struct extent_io_tree *tree, u64 start, u64 end, 166int set_extent_bits(struct extent_io_tree *tree, u64 start, u64 end,
166 int bits, gfp_t mask); 167 int bits, gfp_t mask);
167int set_extent_uptodate(struct extent_io_tree *tree, u64 start, u64 end, 168int set_extent_uptodate(struct extent_io_tree *tree, u64 start, u64 end,