Commit 524f14bb authored by Filipe Manana's avatar Filipe Manana Committed by David Sterba
Browse files

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: default avatarFilipe Manana <fdmanana@suse.com>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 604e6681
Loading
Loading
Loading
Loading
+6 −17
Original line number Diff line number Diff line
@@ -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,
			      struct btrfs_path *path)
{
	while (1) {
	if (path->slots[0] >= btrfs_header_nritems(path->nodes[0])) {
		int ret;
		const int slot = path->slots[0];
		const struct extent_buffer *leaf = path->nodes[0];

		/* This is where we start walking the path. */
		if (slot >= btrfs_header_nritems(leaf)) {
			/*
			 * 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;
}