Browse Source

Fix btrfs_next_leaf to check for new items after dropping locks

Signed-off-by: Chris Mason <chris.mason@oracle.com>
Chris Mason 17 years ago
parent
commit
168fd7d271
1 changed files with 7 additions and 0 deletions
  1. 7 0
      fs/btrfs/ctree.c

+ 7 - 0
fs/btrfs/ctree.c

@@ -2999,7 +2999,14 @@ int btrfs_next_leaf(struct btrfs_root *root, struct btrfs_path *path)
 		return ret;
 
 	nritems = btrfs_header_nritems(path->nodes[0]);
+	/*
+	 * by releasing the path above we dropped all our locks.  A balance
+	 * could have added more items next to the key that used to be
+	 * at the very end of the block.  So, check again here and
+	 * advance the path if there are now more items available.
+	 */
 	if (nritems > 0 && path->slots[0] < nritems - 1) {
+		path->slots[0]++;
 		goto done;
 	}