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>
This commit is contained in:
parent
445dceb78f
commit
9652480bf4
1 changed files with 4 additions and 1 deletions
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue