Ver Fonte

Fix path slots selection in btrfs_search_forward

We should decrease the found slot by one as btrfs_search_slot does
when bin_search return 1 and node level > 0.

Signed-off-by: Chris Mason <chris.mason@oracle.com>
Yan há 17 anos atrás
pai
commit
9652480bf4
1 ficheiros alterados com 4 adições e 1 exclusões
  1. 4 1
      fs/btrfs/ctree.c

+ 4 - 1
fs/btrfs/ctree.c

@@ -2992,6 +2992,7 @@ int btrfs_search_forward(struct btrfs_root *root, struct btrfs_key *min_key,
 	struct extent_buffer *cur;
 	struct btrfs_key found_key;
 	int slot;
+	int sret;
 	u32 nritems;
 	int level;
 	int ret = 1;
@@ -3009,7 +3010,7 @@ again:
 	while(1) {
 		nritems = btrfs_header_nritems(cur);
 		level = btrfs_header_level(cur);
-		bin_search(cur, min_key, level, &slot);
+		sret = bin_search(cur, min_key, level, &slot);
 
 		/* at level = 0, we're done, setup the path and exit */
 		if (level == 0) {
@@ -3018,6 +3019,8 @@ again:
 			btrfs_item_key_to_cpu(cur, &found_key, slot);
 			goto out;
 		}
+		if (sret && slot > 0)
+			slot--;
 		/*
 		 * check this node pointer against the cache_only and
 		 * min_trans parameters.  If it isn't in cache or is too