Commit c50d3e71 authored by Filipe Manana's avatar Filipe Manana Committed by Chris Mason

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: default avatarFilipe David Borba Manana <fdmanana@gmail.com>
Signed-off-by: default avatarChris Mason <clm@fb.com>
parent c715e155
...@@ -749,6 +749,7 @@ static void wait_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, ...@@ -749,6 +749,7 @@ static void wait_extent_bit(struct extent_io_tree *tree, u64 start, u64 end,
* our range starts * our range starts
*/ */
node = tree_search(tree, start); node = tree_search(tree, start);
process_node:
if (!node) if (!node)
break; break;
...@@ -769,7 +770,10 @@ static void wait_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, ...@@ -769,7 +770,10 @@ static void wait_extent_bit(struct extent_io_tree *tree, u64 start, u64 end,
if (start > end) if (start > end)
break; break;
cond_resched_lock(&tree->lock); if (!cond_resched_lock(&tree->lock)) {
node = rb_next(node);
goto process_node;
}
} }
out: out:
spin_unlock(&tree->lock); spin_unlock(&tree->lock);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment