diff options
author | Filipe Manana <fdmanana@gmail.com> | 2014-03-31 14:53:25 +0100 |
---|---|---|
committer | Chris Mason <clm@fb.com> | 2014-04-07 09:08:47 -0700 |
commit | c50d3e71c3d0378bcc9e116f48dab4148854a7bb (patch) | |
tree | 97d715d396f0c2134f6ec85b0d1c5805d1a601c9 /fs/btrfs | |
parent | c715e155c94ba0b3657820d676ec3c7213a5ce81 (diff) | |
download | op-kernel-dev-c50d3e71c3d0378bcc9e116f48dab4148854a7bb.zip op-kernel-dev-c50d3e71c3d0378bcc9e116f48dab4148854a7bb.tar.gz |
Btrfs: more efficient io tree navigation on wait_extent_bit
If we don't reschedule use rb_next to find the next extent state
instead of a full tree search, which is more efficient and safe
since we didn't release the io tree's lock.
Signed-off-by: Filipe David Borba Manana <fdmanana@gmail.com>
Signed-off-by: Chris Mason <clm@fb.com>
Diffstat (limited to 'fs/btrfs')
-rw-r--r-- | fs/btrfs/extent_io.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index d35a3ca..0c43896 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c @@ -749,6 +749,7 @@ again: * our range starts */ node = tree_search(tree, start); +process_node: if (!node) break; @@ -769,7 +770,10 @@ again: if (start > end) break; - cond_resched_lock(&tree->lock); + if (!cond_resched_lock(&tree->lock)) { + node = rb_next(node); + goto process_node; + } } out: spin_unlock(&tree->lock); |