Message ID | d025098ef2c013545df5f37ef85128805a104571.1715699835.git.fdmanana@suse.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | btrfs: fix end of tree detection when searching for data extent ref | expand |
On Tue, May 14, 2024 at 04:26:52PM +0100, fdmanana@kernel.org wrote: > From: Filipe Manana <fdmanana@suse.com> > > 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()") > Signed-off-by: Filipe Manana <fdmanana@suse.com> Reviewed-by: David Sterba <dsterba@suse.com>
在 2024/5/15 00:56, fdmanana@kernel.org 写道: > From: Filipe Manana <fdmanana@suse.com> > > 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()") > Signed-off-by: Filipe Manana <fdmanana@suse.com> Reviewed-by: Qu Wenruo <wqu@suse.com> Thanks, Qu > --- > fs/btrfs/extent-tree.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c > index 47d48233b592..3774c191e36d 100644 > --- a/fs/btrfs/extent-tree.c > +++ b/fs/btrfs/extent-tree.c > @@ -477,7 +477,7 @@ static noinline int lookup_extent_data_ref(struct btrfs_trans_handle *trans, > if (path->slots[0] >= nritems) { > ret = btrfs_next_leaf(root, path); > if (ret) { > - if (ret > 1) > + if (ret > 0) > return -ENOENT; > return ret; > }
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index 47d48233b592..3774c191e36d 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -477,7 +477,7 @@ static noinline int lookup_extent_data_ref(struct btrfs_trans_handle *trans, if (path->slots[0] >= nritems) { ret = btrfs_next_leaf(root, path); if (ret) { - if (ret > 1) + if (ret > 0) return -ENOENT; return ret; }