aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs
diff options
context:
space:
mode:
authorChris Mason <chris.mason@oracle.com>2009-02-04 09:31:42 -0500
committerChris Mason <chris.mason@oracle.com>2009-02-04 09:31:42 -0500
commit12f4daccfc3732280debba8f9ba49720372de831 (patch)
tree922d52b907ea8495ab9362a789d607ed7f61b637 /fs/btrfs
parent4d081c41a4f98aecb5e86ef7d3e644cc7b52131f (diff)
Btrfs: fix btrfs_unlock_up_safe to walk the entire path
btrfs_unlock_up_safe would break out at the first NULL node entry or unlocked node it found in the path. Some of the callers have missing nodes at the lower levels of the path, so this commit fixes things to check all the nodes in the path before returning. Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs')
-rw-r--r--fs/btrfs/ctree.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c
index f6916ceb3920..0d1e3b91e7bd 100644
--- a/fs/btrfs/ctree.c
+++ b/fs/btrfs/ctree.c
@@ -1439,9 +1439,9 @@ noinline void btrfs_unlock_up_safe(struct btrfs_path *path, int level)
1439 1439
1440 for (i = level; i < BTRFS_MAX_LEVEL; i++) { 1440 for (i = level; i < BTRFS_MAX_LEVEL; i++) {
1441 if (!path->nodes[i]) 1441 if (!path->nodes[i])
1442 break; 1442 continue;
1443 if (!path->locks[i]) 1443 if (!path->locks[i])
1444 break; 1444 continue;
1445 btrfs_tree_unlock(path->nodes[i]); 1445 btrfs_tree_unlock(path->nodes[i]);
1446 path->locks[i] = 0; 1446 path->locks[i] = 0;
1447 } 1447 }