[PATCH] btrfs: free qgroup configuration when quota enable fails
From: Guanjie Chen
Date: Fri Aug 14 2026 - 07:23:07 EST
Quota enable adds qgroups to fs_info->qgroup_tree before the operation is
guaranteed to succeed. On failure, the current error path removes only the
sysfs entries, leaving the qgroups and their relations in memory.
Use btrfs_free_qgroup_config() instead. It is the existing qgroup teardown
helper and removes the in-memory qgroups, their relations and the sysfs
entries.
This is safe because the failure cleanup runs with qgroup_ioctl_lock held
and before quota_root is published or quota accounting is enabled. Qgroups
already added to the tree are freed by btrfs_free_qgroup_config(), while an
untransferred preallocation and quota_root are still released by the
existing cleanup code. Transaction handling is unchanged.
Signed-off-by: Guanjie Chen <jk.chen1095@xxxxxxxxx>
---
fs/btrfs/qgroup.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c
--- a/fs/btrfs/qgroup.c
+++ b/fs/btrfs/qgroup.c
@@ -1292,7 +1292,7 @@ out_free_root:
btrfs_put_root(quota_root);
out:
if (ret)
- btrfs_sysfs_del_qgroups(fs_info);
+ btrfs_free_qgroup_config(fs_info);
mutex_unlock(&fs_info->qgroup_ioctl_lock);
if (ret && trans)
btrfs_end_transaction(trans);
--
2.43.0