Commit e41c75ca authored by Filipe Manana's avatar Filipe Manana Committed by David Sterba
Browse files

btrfs: qgroup: set quota enabled bit if quota disable fails flushing reservations



Before waiting for the rescan worker to finish and flushing reservations,
we clear the BTRFS_FS_QUOTA_ENABLED flag from fs_info. If we fail flushing
reservations we leave with the flag not set which is not correct since
quotas are still enabled - we must set back the flag on error paths, such
as when we fail to start a transaction, except for error paths that abort
a transaction. The reservation flushing happens very early before we do
any operation that actually disables quotas and before we start a
transaction, so set back BTRFS_FS_QUOTA_ENABLED if it fails.

Fixes: af0e2aab ("btrfs: qgroup: flush reservations during quota disable")
CC: stable@vger.kernel.org # 6.12+
Reviewed-by: default avatarQu Wenruo <wqu@suse.com>
Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 736bd9d2
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -1334,11 +1334,14 @@ int btrfs_quota_disable(struct btrfs_fs_info *fs_info)

	/*
	 * We have nothing held here and no trans handle, just return the error
	 * if there is one.
	 * if there is one and set back the quota enabled bit since we didn't
	 * actually disable quotas.
	 */
	ret = flush_reservations(fs_info);
	if (ret)
	if (ret) {
		set_bit(BTRFS_FS_QUOTA_ENABLED, &fs_info->flags);
		return ret;
	}

	/*
	 * 1 For the root item