diff options
author | Qu Wenruo <wqu@suse.com> | 2023-09-02 08:13:57 +0800 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2023-10-12 16:44:03 +0200 |
commit | dce28769a33a95425b007f00842d6e12ffa28f83 (patch) | |
tree | 739c58504c0419d6d6a2de2d9374c0416ab1558f /fs/btrfs/qgroup.h | |
parent | a4a81383fbf8c4e17ea6bbc7f005be98f5ece61b (diff) | |
download | linux-stable-dce28769a33a95425b007f00842d6e12ffa28f83.tar.gz linux-stable-dce28769a33a95425b007f00842d6e12ffa28f83.tar.bz2 linux-stable-dce28769a33a95425b007f00842d6e12ffa28f83.zip |
btrfs: qgroup: use qgroup_iterator_nested to in qgroup_update_refcnt()
The ulist @qgroups is utilized to record all involved qgroups from both
old and new roots inside btrfs_qgroup_account_extent().
Due to the fact that qgroup_update_refcnt() itself is already utilizing
qgroup_iterator, here we have to introduce another list_head,
btrfs_qgroup::nested_iterator, allowing nested iteration.
Signed-off-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'fs/btrfs/qgroup.h')
-rw-r--r-- | fs/btrfs/qgroup.h | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/fs/btrfs/qgroup.h b/fs/btrfs/qgroup.h index 6a43618580b6..b4416d5be47d 100644 --- a/fs/btrfs/qgroup.h +++ b/fs/btrfs/qgroup.h @@ -229,6 +229,24 @@ struct btrfs_qgroup { * finished. */ struct list_head iterator; + + /* + * For nested iterator usage. + * + * Here we support at most one level of nested iterator calls like: + * + * LIST_HEAD(all_qgroups); + * { + * LIST_HEAD(local_qgroups); + * qgroup_iterator_add(local_qgroups, qg); + * qgroup_iterator_nested_add(all_qgroups, qg); + * do_some_work(local_qgroups); + * qgroup_iterator_clean(local_qgroups); + * } + * do_some_work(all_qgroups); + * qgroup_iterator_nested_clean(all_qgroups); + */ + struct list_head nested_iterator; struct rb_node node; /* tree of qgroups */ /* |