On 8/9/18 5:17 PM, Filipe Manana wrote: > On Thu, Aug 9, 2018 at 8:08 AM, Qu Wenruo <w...@suse.com> wrote: >> [BUG] >> In the following case, rescan won't zero out the number of qgroup 1/0: >> ------ >> $ mkfs.btrfs -fq $DEV >> $ mount $DEV /mnt >> >> $ btrfs quota enable /mnt >> $ btrfs qgroup create 1/0 /mnt >> $ btrfs sub create /mnt/sub >> $ btrfs qgroup assign 0/257 1/0 /mnt >> >> $ dd if=/dev/urandom of=/mnt/sub/file bs=1k count=1000 >> $ btrfs sub snap /mnt/sub /mnt/snap >> $ btrfs quota rescan -w /mnt >> $ btrfs qgroup show -pcre /mnt >> qgroupid rfer excl max_rfer max_excl parent child >> -------- ---- ---- -------- -------- ------ ----- >> 0/5 16.00KiB 16.00KiB none none --- --- >> 0/257 1016.00KiB 16.00KiB none none 1/0 --- >> 0/258 1016.00KiB 16.00KiB none none --- --- >> 1/0 1016.00KiB 16.00KiB none none --- 0/257 >> >> so far so good, but: >> >> $ btrfs qgroup remove 0/257 1/0 /mnt >> WARNING: quotas may be inconsistent, rescan needed >> $ btrfs quota rescan -w /mnt >> $ btrfs qgroup show -pcre /mnt >> qgoupid rfer excl max_rfer max_excl parent child >> -------- ---- ---- -------- -------- ------ ----- >> 0/5 16.00KiB 16.00KiB none none --- --- >> 0/257 1016.00KiB 16.00KiB none none --- --- >> 0/258 1016.00KiB 16.00KiB none none --- --- >> 1/0 1016.00KiB 16.00KiB none none --- --- >> ^^^^^^^^^^ ^^^^^^^^ not cleared >> ------ >> >> [CAUSE] >> Before rescan we call qgroup_rescan_zero_tracking() to zero out all >> qgroups' accounting numbers. >> >> However we don't mark all qgroups dirty, but rely on rescan to mark >> qgroups dirty. >> >> If we have any high level qgroup but without any child (orphan group), > > That sentence is confusing. An orphan, by definition [1], is someone > (or something in this case) without parents. > But you mention a group without children, so that should be named > "childless" or simply say "without children".
Makes sense, I'll correct the commit message in next version. Thanks, Qu > So one part of the sentence is wrong, either what is in parenthesis or > what comes before them. > > [1] https://www.thefreedictionary.com/orphan > >> it >> won't be marked dirty during rescan, since we can not reach that qgroup. >> >> This will cause QGROUP_INFO items of orphan qgroups never get updated in >> quota tree, thus their numbers will stay the same in "btrfs qgroup show" >> output. >> >> [FIX] >> Just mark all qgroups dirty in qgroup_rescan_zero_tracking(), so even we >> have orphan qgroups their QGROUP_INFO items will still get updated during >> rescan. >> >> Reported-by: Misono Tomohiro <misono.tomoh...@jp.fujitsu.com> >> Signed-off-by: Qu Wenruo <w...@suse.com> >> --- >> changelog: >> v2: >> Fix some grammar errors in commit message. >> --- >> fs/btrfs/qgroup.c | 1 + >> 1 file changed, 1 insertion(+) >> >> diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c >> index 48c1c3e7baf3..5a5372b33d96 100644 >> --- a/fs/btrfs/qgroup.c >> +++ b/fs/btrfs/qgroup.c >> @@ -2864,6 +2864,7 @@ qgroup_rescan_zero_tracking(struct btrfs_fs_info >> *fs_info) >> qgroup->rfer_cmpr = 0; >> qgroup->excl = 0; >> qgroup->excl_cmpr = 0; >> + qgroup_dirty(fs_info, qgroup); >> } >> spin_unlock(&fs_info->qgroup_lock); >> } >> -- >> 2.18.0 >> >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in >> the body of a message to majord...@vger.kernel.org >> More majordomo info at http://vger.kernel.org/majordomo-info.html > > >
signature.asc
Description: OpenPGP digital signature