btrfs: remove pointless loop at btrfs_get_next_valid_item()
authorFilipe Manana <fdmanana@suse.com>
Wed, 5 Apr 2023 17:52:23 +0000 (18:52 +0100)
committerDavid Sterba <dsterba@suse.com>
Mon, 17 Apr 2023 17:52:19 +0000 (19:52 +0200)
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>
fs/btrfs/ctree.c

index 3b956176b038330d3ec7b26161db1d0b33e2dc48..3c983c70028afa26429ba83e518f9ca8af32ac71 100644 (file)
@@ -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;
+               ret = btrfs_next_leaf(root, path);
+               if (ret)
+                       return ret;
        }
+
+       btrfs_item_key_to_cpu(path->nodes[0], key, path->slots[0]);
        return 0;
 }