在 2024/5/4 21:08, Dan Carpenter 写道:
The "i++" was accidentally left out so it just sets qgids[0] over and over. Fixes: 5343cd9364ea ("btrfs: qgroup: simple quota auto hierarchy for nested subvolumes") Signed-off-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx>
It is indeed the case, btrfs_qgroup_inherit::groups[] should be the parent qgroupis the subvolume would be added to. In fact this can lead to unexpected problems, as the groups[1:] would be all 0, leading to later find_qgroup_rb() unable to find a qgroup and cause snapshot creation failure. IMHO you can also craft a fstest case, where the parent subvolume is assgined to multiple qgroups, and creating a new subvolume inside that one, which should lead to subvolume creation failure. Reviewed-by: Qu Wenruo <wqu@xxxxxxxx> Thanks, Qu
--- From static analysis. Untested. fs/btrfs/qgroup.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c index 2ca6bbc1bcc9..1284e78fffce 100644 --- a/fs/btrfs/qgroup.c +++ b/fs/btrfs/qgroup.c @@ -3121,7 +3121,7 @@ static int qgroup_auto_inherit(struct btrfs_fs_info *fs_info, qgids = res->qgroups; list_for_each_entry(qg_list, &inode_qg->groups, next_group) - qgids[i] = qg_list->group->qgroupid; + qgids[i++] = qg_list->group->qgroupid; *inherit = res; return 0;