diff options
| author | 2016-02-17 10:37:36 +0100 | |
|---|---|---|
| committer | 2016-02-17 10:37:36 +0100 | |
| commit | 9109dc97b0155e500cdf3bcd91507bc24defefc1 (patch) | |
| tree | 5d721cbfeb3576dc6969093ab04f17666737b6a4 /fs/btrfs/backref.c | |
| parent | perf/x86: Move perf_event.h to its new home (diff) | |
| parent | perf/core: Plug potential memory leak in CPU_UP_PREPARE (diff) | |
| download | wireguard-linux-9109dc97b0155e500cdf3bcd91507bc24defefc1.tar.xz wireguard-linux-9109dc97b0155e500cdf3bcd91507bc24defefc1.zip | |
Merge branch 'perf/urgent' into perf/core, to queue up dependent patch
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to '')
| -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 b90cd3776f8e..f6dac40f87ff 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); |
