]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
btrfs: fix GET_SUBVOL_INFO after compat refactor
authorDaan De Meyer <daan@amutable.com>
Mon, 13 Jul 2026 07:50:42 +0000 (09:50 +0200)
committerDavid Sterba <dsterba@suse.com>
Tue, 14 Jul 2026 05:05:10 +0000 (07:05 +0200)
btrfs_search_slot() returns a positive value when the search key does
not exactly match an item. This is expected here, since offset 0 is used
to find the first ROOT_BACKREF for the subvolume and the actual key has
the parent root ID as its offset.

Before the compat ioctl refactoring, the native handler still copied the
filled structure to userspace when the search returned 1. After the
lookup was moved to a shared helper, both native and compat callers
treat the positive return value as a failure and skip copy_to_user(),
leaving BTRFS_IOC_GET_SUBVOL_INFO unusable for non-top-level
subvolumes.

Reset ret after successfully validating and reading the ROOT_BACKREF so
the helper reports success and both callers copy the result to
userspace.

Fixes: 538e5bdbc899 ("btrfs: add 32-bit compat ioctl for BTRFS_IOC_GET_SUBVOL_INFO")
Reviewed-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: Daan De Meyer <daan@amutable.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/ioctl.c

index 81e87bc398288d2f6fc031e129497003c4f08d91..68b33f365fda676fd49b2e2b7ed5bf34f687dc6a 100644 (file)
@@ -2048,6 +2048,7 @@ static int _btrfs_ioctl_get_subvol_info(struct inode *inode,
                        ret = -ENOENT;
                        goto out;
                }
+               ret = 0;
        }
 
 out: