浏览代码

Fix btrfs_next_leaf to check for new items after dropping locks

Signed-off-by: Chris Mason <chris.mason@oracle.com>
Chris Mason 17 年之前
父节点
当前提交
168fd7d271
共有 1 个文件被更改,包括 7 次插入0 次删除
  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;
 	}