Message ID | cover.1693391268.git.wqu@suse.com (mailing list archive) |
---|---|
Headers | show |
Series | btrfs: qgroup: reduce GFP_ATOMIC usage for ulist | expand |
On Wed, Aug 30, 2023 at 06:37:22PM +0800, Qu Wenruo wrote: > [REPO] > https://github.com/adam900710/linux/tree/qgroup_mutex > > Yep, the branch name shows my previous failed attempt to solve the > problem. > > [PROBLEM] > There are quite some GFP_ATOMIC usage for btrfs qgroups, most of them > are for ulists. > > Those ulists are just used as a temporary memory to trace the involved > qgroups. > > [ENHANCEMENT] > This patchset would address the problem by adding a new list_head called > iterator for btrfs_qgroup. > > And all call sites but one of ulist allocation can be migrated to use > the new qgroup_iterator facility to iterate qgroups without any memory > allocation. > > The only remaining ulist call site is @qgroups ulist utilized inside > btrfs_qgroup_account_extent(), which is utilized to get all involved > qgroups for both old and new roots. > > I tried to extract the qgroups collection code into a dedicate loop > out of qgroup_update_refcnt(), but it would lead to test case failure of > btrfs/028 (accounts underflow). > > Thus for now only the safe part is sent to the list. > > And BTW since we can skip quite some memory allocation failure handling > (since there is no memory allocation), we also save some lines of code. These all LGTM, thanks! Reviewed-by: Boris Burkov <boris@bur.io> > > Qu Wenruo (5): > btrfs: qgroup: iterate qgroups without memory allocation for > qgroup_reserve() > btrfs: qgroup: use qgroup_iterator facility for > btrfs_qgroup_free_refroot() > btrfs: qgroup: use qgroup_iterator facility for qgroup_convert_meta() > btrfs: qgroup: use qgroup_iterator facility for > __qgroup_excl_accounting() > btrfs: qgroup: use qgroup_iterator facility to replace @tmp ulist of > qgroup_update_refcnt() > > fs/btrfs/qgroup.c | 252 ++++++++++++++++------------------------------ > fs/btrfs/qgroup.h | 9 ++ > 2 files changed, 94 insertions(+), 167 deletions(-) > > -- > 2.41.0 >