diff options
author | Boris Burkov <boris@bur.io> | 2024-03-19 10:54:22 -0700 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2024-04-02 19:18:04 +0200 |
commit | 141fb8cd206ace23c02cd2791c6da52c1d77d42a (patch) | |
tree | 6d1f35e12cd07c231f96c4fc36a03122476a4ad6 /fs/btrfs | |
parent | ef1e68236b9153c27cb7cf29ead0c532870d4215 (diff) | |
download | linux-141fb8cd206ace23c02cd2791c6da52c1d77d42a.tar.gz linux-141fb8cd206ace23c02cd2791c6da52c1d77d42a.tar.bz2 linux-141fb8cd206ace23c02cd2791c6da52c1d77d42a.zip |
btrfs: qgroup: correctly model root qgroup rsv in convert
We use add_root_meta_rsv and sub_root_meta_rsv to track prealloc and
pertrans reservations for subvolumes when quotas are enabled. The
convert function does not properly increment pertrans after decrementing
prealloc, so the count is not accurate.
Note: we check that the fs is not read-only to mirror the logic in
qgroup_convert_meta, which checks that before adding to the pertrans rsv.
Fixes: 8287475a2055 ("btrfs: qgroup: Use root::qgroup_meta_rsv_* to record qgroup meta reserved space")
CC: stable@vger.kernel.org # 6.1+
Reviewed-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: Boris Burkov <boris@bur.io>
Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'fs/btrfs')
-rw-r--r-- | fs/btrfs/qgroup.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c index 5f90f0605b12..cf8820ce7aa2 100644 --- a/fs/btrfs/qgroup.c +++ b/fs/btrfs/qgroup.c @@ -4495,6 +4495,8 @@ void btrfs_qgroup_convert_reserved_meta(struct btrfs_root *root, int num_bytes) BTRFS_QGROUP_RSV_META_PREALLOC); trace_qgroup_meta_convert(root, num_bytes); qgroup_convert_meta(fs_info, root->root_key.objectid, num_bytes); + if (!sb_rdonly(fs_info->sb)) + add_root_meta_rsv(root, num_bytes, BTRFS_QGROUP_RSV_META_PERTRANS); } /* |