* [PATCH v2] common/quota: fix to wait for all inodes been evicted in _check_quota_usage()
@ 2025-12-06 0:40 Chao Yu
2025-12-08 17:02 ` Darrick J. Wong
0 siblings, 1 reply; 2+ messages in thread
From: Chao Yu @ 2025-12-06 0:40 UTC (permalink / raw)
To: Zorro Lang, fstests; +Cc: jaegeuk, linux-f2fs-devel, Chao Yu, Darrick J. Wong
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 <jaegeuk@kernel.org>
Cc: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Chao Yu <chao@kernel.org>
---
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)
--
2.49.0
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH v2] common/quota: fix to wait for all inodes been evicted in _check_quota_usage()
2025-12-06 0:40 [PATCH v2] common/quota: fix to wait for all inodes been evicted in _check_quota_usage() Chao Yu
@ 2025-12-08 17:02 ` Darrick J. Wong
0 siblings, 0 replies; 2+ messages in thread
From: Darrick J. Wong @ 2025-12-08 17:02 UTC (permalink / raw)
To: Chao Yu; +Cc: Zorro Lang, fstests, jaegeuk, linux-f2fs-devel
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 <jaegeuk@kernel.org>
> Cc: Darrick J. Wong <djwong@kernel.org>
> Signed-off-by: Chao Yu <chao@kernel.org>
> ---
> 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
>
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2025-12-08 17:02 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-12-06 0:40 [PATCH v2] common/quota: fix to wait for all inodes been evicted in _check_quota_usage() Chao Yu
2025-12-08 17:02 ` Darrick J. Wong
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox