btrfs: move ulist allocation out of transaction in quota enable
authorDavid Sterba <dsterba@suse.com>
Wed, 19 Dec 2018 18:47:37 +0000 (19:47 +0100)
committerDavid Sterba <dsterba@suse.com>
Wed, 27 Feb 2019 13:10:25 +0000 (14:10 +0100)
commit7503b83d80f0a3da5dead1293f5454206e7f9db6
treeeab3153af1def62923574438f992fc2cd7458af5
parentaea6f028d01d629eda2e958ccd1133e805cda159
btrfs: move ulist allocation out of transaction in quota enable

The allocation happens with GFP_KERNEL after a transaction has been
started, this can potentially cause deadlock if reclaim tries to get the
memory by flushing filesystem data.

The fs_info::qgroup_ulist is not used during transaction start when
quotas are not enabled. The status bit BTRFS_FS_QUOTA_ENABLED is set
later in btrfs_quota_enable so it's safe to move it before the
transaction start.

Reviewed-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/qgroup.c