]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
btrfs: qgroup: do not check qgroup inherit if qgroup is disabled
authorQu Wenruo <wqu@suse.com>
Sat, 20 Apr 2024 07:50:27 +0000 (17:20 +0930)
committerDavid Sterba <dsterba@suse.com>
Thu, 2 May 2024 19:30:14 +0000 (21:30 +0200)
[BUG]
After kernel commit 86211eea8ae1 ("btrfs: qgroup: validate
btrfs_qgroup_inherit parameter"), user space tool snapper will fail to
create snapshot using its timeline feature.

[CAUSE]
It turns out that, if using timeline snapper would unconditionally pass
btrfs_qgroup_inherit parameter (assigning the new snapshot to qgroup 1/0)
for snapshot creation.

In that case, since qgroup is disabled there would be no qgroup 1/0, and
btrfs_qgroup_check_inherit() would return -ENOENT and fail the whole
snapshot creation.

[FIX]
Just skip the check if qgroup is not enabled.
This is to keep the older behavior for user space tools, as if the
kernel behavior changed for user space, it is a regression of kernel.

Thankfully snapper is also fixing the behavior by detecting if qgroup is
running in the first place, so the effect should not be that huge.

Link: https://github.com/openSUSE/snapper/issues/894
Fixes: 86211eea8ae1 ("btrfs: qgroup: validate btrfs_qgroup_inherit parameter")
CC: stable@vger.kernel.org # 6.8+
Reviewed-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/qgroup.c

index 364acc9bbe730c131a3e4f9b6c8387e6645e300a..40e5f7f2fcb7f852f22729fefa640895f57d9933 100644 (file)
@@ -3045,6 +3045,8 @@ int btrfs_qgroup_check_inherit(struct btrfs_fs_info *fs_info,
                               struct btrfs_qgroup_inherit *inherit,
                               size_t size)
 {
+       if (!btrfs_qgroup_enabled(fs_info))
+               return 0;
        if (inherit->flags & ~BTRFS_QGROUP_INHERIT_FLAGS_SUPP)
                return -EOPNOTSUPP;
        if (size < sizeof(*inherit) || size > PAGE_SIZE)