aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/backref.c
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2016-03-16 08:11:09 +0100
committerDaniel Vetter <daniel.vetter@ffwll.ch>2016-03-16 11:18:25 +0100
commit31fa684096601d8fe5ea11e1c4d473229fef7c70 (patch)
tree5e355028e1afb00483177796d60252c25ce9823d /fs/btrfs/backref.c
parent359d2243117a79599435141fda0047d01ef324e8 (diff)
parent86d65b7e7a0c927d07d18605c276d0f142438ead (diff)
downloadkernel_replicant_linux-31fa684096601d8fe5ea11e1c4d473229fef7c70.tar.gz
kernel_replicant_linux-31fa684096601d8fe5ea11e1c4d473229fef7c70.tar.bz2
kernel_replicant_linux-31fa684096601d8fe5ea11e1c4d473229fef7c70.zip
Merge remote-tracking branch 'airlied/drm-next' into drm-intel-next-queued
Backmerge because: - Maarten needs latest atomic patches from drm-misc. - Lionel needs the color manager core patch from drm-misc. - Ander extracted intel_dpll_mgr.c, we need a backmerge to avoid git losing track of things too often (right now it seems ok due to cherry-picks). - Tvrtko needs a stable baseline to apply some large-scale renaming patches to i915 GEM code. Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Diffstat (limited to 'fs/btrfs/backref.c')
-rw-r--r--fs/btrfs/backref.c10
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);