Btrfs: more efficient io tree navigation on wait_extent_bit
authorFilipe Manana <fdmanana@gmail.com>
Mon, 31 Mar 2014 13:53:25 +0000 (14:53 +0100)
committerChris Mason <clm@fb.com>
Mon, 7 Apr 2014 16:08:47 +0000 (09:08 -0700)
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>
fs/btrfs/extent_io.c

index d35a3ca..0c43896 100644 (file)
@@ -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);