Btrfs: fix btrfs_unlock_up_safe to walk the entire path
authorChris Mason <chris.mason@oracle.com>
Wed, 4 Feb 2009 14:31:42 +0000 (09:31 -0500)
committerChris Mason <chris.mason@oracle.com>
Wed, 4 Feb 2009 14:31:42 +0000 (09:31 -0500)
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>
fs/btrfs/ctree.c

index f6916ceb3920fde476615bc20dfaa1374528a6dc..0d1e3b91e7bd35e8531001e24c5f536081febd70 100644 (file)
@@ -1439,9 +1439,9 @@ noinline void btrfs_unlock_up_safe(struct btrfs_path *path, int level)
 
        for (i = level; i < BTRFS_MAX_LEVEL; i++) {
                if (!path->nodes[i])
-                       break;
+                       continue;
                if (!path->locks[i])
-                       break;
+                       continue;
                btrfs_tree_unlock(path->nodes[i]);
                path->locks[i] = 0;
        }