]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
Btrfs: avoid unnecessary switch of path locks to blocking mode
authorFilipe Manana <fdmanana@suse.com>
Mon, 28 Jul 2014 18:37:17 +0000 (19:37 +0100)
committerChris Mason <clm@fb.com>
Wed, 17 Sep 2014 20:37:56 +0000 (13:37 -0700)
If we need to cow a node, increase the write lock level and retry the
tree search, there's no point of changing the node locks in our path
to blocking mode, as we only waste time and unnecessarily wake up other
tasks waiting on the spinning locks (just to block them again shortly
after) because we release our path before repeating the tree search.

Signed-off-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: Chris Mason <clm@fb.com>
fs/btrfs/ctree.c

index bd0ae3ec76ff82aecb9e28f414805e57912243bf..783ea3bac7dc19c371479322f33a3e48c2ef0ee4 100644 (file)
@@ -2792,8 +2792,6 @@ int btrfs_search_slot(struct btrfs_trans_handle *trans, struct btrfs_root
                        if (!should_cow_block(trans, root, b))
                                goto cow_done;
 
-                       btrfs_set_path_blocking(p);
-
                        /*
                         * must have write locks on this node and the
                         * parent
@@ -2807,6 +2805,7 @@ int btrfs_search_slot(struct btrfs_trans_handle *trans, struct btrfs_root
                                goto again;
                        }
 
+                       btrfs_set_path_blocking(p);
                        err = btrfs_cow_block(trans, root, b,
                                              p->nodes[level + 1],
                                              p->slots[level + 1], &b);