btrfs: remove pointless loop at btrfs_get_next_valid_item()
It's pointless to have a while loop at btrfs_get_next_valid_item(), as if the slot on the current leaf is beyond the last item, we call btrfs_next_leaf(), which leaves us at a valid slot of the next leaf (or a valid slot in the current leaf if after releasing the path an item gets pushed from the next leaf to the current leaf). So just call btrfs_next_leaf() if the current slot on the current leaf is beyond the last item. Signed-off-by: Filipe Manana <fdmanana@suse.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
604e6681e1
commit
524f14bb11
@ -2490,26 +2490,15 @@ int btrfs_search_backwards(struct btrfs_root *root, struct btrfs_key *key,
|
|||||||
int btrfs_get_next_valid_item(struct btrfs_root *root, struct btrfs_key *key,
|
int btrfs_get_next_valid_item(struct btrfs_root *root, struct btrfs_key *key,
|
||||||
struct btrfs_path *path)
|
struct btrfs_path *path)
|
||||||
{
|
{
|
||||||
while (1) {
|
if (path->slots[0] >= btrfs_header_nritems(path->nodes[0])) {
|
||||||
int ret;
|
int ret;
|
||||||
const int slot = path->slots[0];
|
|
||||||
const struct extent_buffer *leaf = path->nodes[0];
|
|
||||||
|
|
||||||
/* This is where we start walking the path. */
|
ret = btrfs_next_leaf(root, path);
|
||||||
if (slot >= btrfs_header_nritems(leaf)) {
|
if (ret)
|
||||||
/*
|
return ret;
|
||||||
* If we've reached the last slot in this leaf we need
|
|
||||||
* to go to the next leaf and reset the path.
|
|
||||||
*/
|
|
||||||
ret = btrfs_next_leaf(root, path);
|
|
||||||
if (ret)
|
|
||||||
return ret;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
/* Store the found, valid item in @key. */
|
|
||||||
btrfs_item_key_to_cpu(leaf, key, slot);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
btrfs_item_key_to_cpu(path->nodes[0], key, path->slots[0]);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user