btrfs: fix end of tree detection when searching for data extent ref
authorFilipe Manana <fdmanana@suse.com>
Tue, 14 May 2024 14:36:35 +0000 (15:36 +0100)
committerDavid Sterba <dsterba@suse.com>
Wed, 15 May 2024 15:57:39 +0000 (17:57 +0200)
At lookup_extent_data_ref() we are incorrectly checking if we are at the
last slot of the last leaf in the extent tree. We are returning -ENOENT
if btrfs_next_leaf() returns a value greater than 1, but btrfs_next_leaf()
never returns anything greater than 1:

1) It returns < 0 on error;

2) 0 if there is a next leaf (or a new item was added to the end of the
   current leaf after releasing the path);

3) 1 if there are no more leaves (and no new items were added to the last
   leaf after releasing the path).

So fix this by checking if the return value is greater than zero instead
of being greater than one.

Fixes: 1618aa3c2e01 ("btrfs: simplify return variables in lookup_extent_data_ref()")
Reviewed-by: Qu Wenruo <wqu@suse.com>
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/extent-tree.c

index 47d48233b592b4482ca3b7adb4d02c7da0a66300..3774c191e36dcfd04ffa0cdfcf81470d0b93cdfd 100644 (file)
@@ -477,7 +477,7 @@ again:
                if (path->slots[0] >= nritems) {
                        ret = btrfs_next_leaf(root, path);
                        if (ret) {
-                               if (ret > 1)
+                               if (ret > 0)
                                        return -ENOENT;
                                return ret;
                        }