diff options
author | Filipe Manana <fdmanana@suse.com> | 2014-07-28 19:37:17 +0100 |
---|---|---|
committer | Chris Mason <clm@fb.com> | 2014-09-17 13:37:56 -0700 |
commit | 160f4089c8580b32b5805e7fd8ec7b3810f442c1 (patch) | |
tree | 9134be532e8fb6d6875fd62d74ee37605094d8b9 /fs/btrfs/ctree.c | |
parent | 24cdc847d9842bdfd85a005ebc39050bcbc7acba (diff) | |
download | linux-160f4089c8580b32b5805e7fd8ec7b3810f442c1.tar.gz linux-160f4089c8580b32b5805e7fd8ec7b3810f442c1.tar.bz2 linux-160f4089c8580b32b5805e7fd8ec7b3810f442c1.zip |
Btrfs: avoid unnecessary switch of path locks to blocking mode
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>
Diffstat (limited to 'fs/btrfs/ctree.c')
-rw-r--r-- | fs/btrfs/ctree.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c index bd0ae3ec76ff..783ea3bac7dc 100644 --- a/fs/btrfs/ctree.c +++ b/fs/btrfs/ctree.c @@ -2792,8 +2792,6 @@ again: 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 @@ again: goto again; } + btrfs_set_path_blocking(p); err = btrfs_cow_block(trans, root, b, p->nodes[level + 1], p->slots[level + 1], &b); |