Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9652480b authored by Yan's avatar Yan Committed by Chris Mason
Browse files

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: default avatarChris Mason <chris.mason@oracle.com>
parent 445dceb7
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -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 @@ int btrfs_search_forward(struct btrfs_root *root, struct btrfs_key *min_key,
	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 @@ int btrfs_search_forward(struct btrfs_root *root, struct btrfs_key *min_key,
			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