diff options
author | Ingo Molnar <mingo@kernel.org> | 2016-02-17 10:37:36 +0100 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2016-02-17 10:37:36 +0100 |
commit | 9109dc97b0155e500cdf3bcd91507bc24defefc1 (patch) | |
tree | 5d721cbfeb3576dc6969093ab04f17666737b6a4 /fs/btrfs/backref.c | |
parent | 27f6d22b037b2be6685e0e27cce929779d634119 (diff) | |
parent | 059fcd8cd16622da6513804a7a3e826d152c6c96 (diff) |
Merge branch 'perf/urgent' into perf/core, to queue up dependent patch
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'fs/btrfs/backref.c')
-rw-r--r-- | fs/btrfs/backref.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/fs/btrfs/backref.c b/fs/btrfs/backref.c index b90cd3776f8e0..f6dac40f87ff5 100644 --- a/fs/btrfs/backref.c +++ b/fs/btrfs/backref.c @@ -1406,7 +1406,8 @@ char *btrfs_ref_to_path(struct btrfs_root *fs_root, struct btrfs_path *path, read_extent_buffer(eb, dest + bytes_left, name_off, name_len); if (eb != eb_in) { - btrfs_tree_read_unlock_blocking(eb); + if (!path->skip_locking) + btrfs_tree_read_unlock_blocking(eb); free_extent_buffer(eb); } ret = btrfs_find_item(fs_root, path, parent, 0, @@ -1426,9 +1427,10 @@ char *btrfs_ref_to_path(struct btrfs_root *fs_root, struct btrfs_path *path, eb = path->nodes[0]; /* make sure we can use eb after releasing the path */ if (eb != eb_in) { - atomic_inc(&eb->refs); - btrfs_tree_read_lock(eb); - btrfs_set_lock_blocking_rw(eb, BTRFS_READ_LOCK); + if (!path->skip_locking) + btrfs_set_lock_blocking_rw(eb, BTRFS_READ_LOCK); + path->nodes[0] = NULL; + path->locks[0] = 0; } btrfs_release_path(path); iref = btrfs_item_ptr(eb, slot, struct btrfs_inode_ref); |