From: Filipe Manana Date: Mon, 31 Mar 2014 13:53:25 +0000 (+0100) Subject: Btrfs: more efficient io tree navigation on wait_extent_bit X-Git-Tag: firefly_0821_release~176^2~3883^2~21 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=c50d3e71c3d0378bcc9e116f48dab4148854a7bb;p=firefly-linux-kernel-4.4.55.git 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 Signed-off-by: Chris Mason --- diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index d35a3ca15fb5..0c4389634985 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);