On Sat, Dec 06, 2025 at 08:40:17AM +0800, Chao Yu wrote:
> generic/233  3s ... - output mismatch (see 
> /share/git/fstests/results//generic/233.out.bad)
>     --- tests/generic/233.out   2025-01-12 21:57:40.259440359 +0800
>     +++ /share/git/fstests/results//generic/233.out.bad 2025-12-04 
> 03:02:26.000000000 +0800
>     @@ -4,4 +4,12 @@
> 
>      seed = S
>      Comparing user usage
>     +4c4
>     +< #1000     --   31476   32000   32000            994  1000  1000
>     +---
>     +> #1000     --   31476   32000   32000            944  1000  1000
>     ...
>     (Run 'diff -u /share/git/fstests/tests/generic/233.out 
> /share/git/fstests/results//generic/233.out.bad'  to see the entire diff)
> Ran: generic/233
> Failures: generic/233
> Failed 1 of 1 tests
> 
> Sometimes, generic/233 will fail due to it founds inode count is mismatched
> in between quota system and filesystem.
> 
> The reason is cgroup v2 implementation will increase inode reference first,
> and then, attach it to thread related cgroup writeback structure, once it
> needs to switch write owner of target inode, a kernel thread will process
> it, and finally release inode reference via evict_inode().
> 
> So, sync & drop_cache may not guarantee all inodes being evicted, as cgroup
> has one more referenece on inodes during the time.
> 
> If inode has not been evicted, dquot inode reference will not be release, it
> will lead to inode count mismatch.
> 
> Let's add a delay to wait for cgroup switching completion before quota check.
> 
> Cc: Jaegeuk Kim <[email protected]>
> Cc: Darrick J. Wong <[email protected]>
> Signed-off-by: Chao Yu <[email protected]>
> ---
> v2:
> - sleep only for f2fs case
>  common/quota | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/common/quota b/common/quota
> index a51386b1..a7239501 100644
> --- a/common/quota
> +++ b/common/quota
> @@ -333,6 +333,11 @@ _check_quota_usage()
>       # XXX: really need an ioctl instead of this big hammer
>       echo 3 > /proc/sys/vm/drop_caches
>  
> +     if [ $FSTYP == "f2fs" ]; then
> +             # wait for inode_switch_wbs_wor_fn() to release inodes
> +             sleep 3
> +     fi
> +
>       VFS_QUOTA=0
>       case $FSTYP in
>       ext2|ext3|ext4|f2fs|gfs2|bcachefs)

Why not use case statement down here?

--D

> -- 
> 2.49.0
> 
> 


_______________________________________________
Linux-f2fs-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to