* [PATCH] generic/798: exclude nfs from cachestat dirty page reporting test
@ 2026-08-24 15:11 Avinesh Kumar
2026-08-24 16:15 ` Darrick J. Wong
0 siblings, 1 reply; 9+ messages in thread
From: Avinesh Kumar @ 2026-08-24 15:11 UTC (permalink / raw)
To: fstests; +Cc: wqu
From: Avinesh Kumar <avinesh.kumar@suse.com>
generic/798 checks cachestat() page cache dirty state between write and
fsync operations.
On NFS, the client flushes dirty pages to the server during close() to
enforce its close-to-open consistency model. Because the test uses separate
xfs_io invocations, the file is closed after writing, leaving pages already
clean by the time the subsequent cachestat command executes, causing the
test to fail.
- output mismatch (see /opt/xfstests/results//generic/798.out.bad)
--- tests/generic/798.out 2026-08-20 05:25:39.000000000 -0400
+++ /opt/xfstests/results//generic/798.out.bad 2026-08-21 12:30:39.831381108 -0400
@@ -1,16 +1,16 @@
QA output created by 798
=== Test with 1 pages ===
-Cached: 1, Dirty: 1, Writeback: 0, Evicted: 0, Recently Evicted: 0
+Cached: 1, Dirty: 0, Writeback: 0, Evicted: 0, Recently Evicted: 0
Cached: 1, Dirty: 0, Writeback: 0, Evicted: 0, Recently Evicted: 0
=== Test with 2 pages ===
-Cached: 2, Dirty: 2, Writeback: 0, Evicted: 0, Recently Evicted: 0
...
Exclude 'nfs' from running this test.
Signed-off-by: Avinesh Kumar <avinesh.kumar@suse.com>
---
tests/generic/798 | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/tests/generic/798 b/tests/generic/798
index 0fe37646..80b2acc9 100755
--- a/tests/generic/798
+++ b/tests/generic/798
@@ -16,6 +16,12 @@ _require_scratch
_exclude_scratch_mount_option "dax"
_exclude_scratch_mount_option "sync"
+# NFS flushes dirty data back to the server on close() as part of its
+# close-to-open cache consistency model, so a page written and closed in
+# one xfs_io invocation is no longer dirty by the time cachestat runs in
+# a later invocation.
+_exclude_fs nfs
+
pagesize=$(_get_page_size)
_scratch_mkfs > /dev/null
--
2.55.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH] generic/798: exclude nfs from cachestat dirty page reporting test
2026-08-24 15:11 [PATCH] generic/798: exclude nfs from cachestat dirty page reporting test Avinesh Kumar
@ 2026-08-24 16:15 ` Darrick J. Wong
2026-08-26 14:39 ` Avinesh Kumar
2026-08-26 15:01 ` [PATCH v2] generic/798: chain xfs_io commands into a single invocation Avinesh Kumar
0 siblings, 2 replies; 9+ messages in thread
From: Darrick J. Wong @ 2026-08-24 16:15 UTC (permalink / raw)
To: Avinesh Kumar; +Cc: fstests, wqu
On Mon, Aug 24, 2026 at 05:11:06PM +0200, Avinesh Kumar wrote:
> From: Avinesh Kumar <avinesh.kumar@suse.com>
>
> generic/798 checks cachestat() page cache dirty state between write and
> fsync operations.
>
> On NFS, the client flushes dirty pages to the server during close() to
> enforce its close-to-open consistency model. Because the test uses separate
> xfs_io invocations, the file is closed after writing, leaving pages already
> clean by the time the subsequent cachestat command executes, causing the
> test to fail.
>
> - output mismatch (see /opt/xfstests/results//generic/798.out.bad)
> --- tests/generic/798.out 2026-08-20 05:25:39.000000000 -0400
> +++ /opt/xfstests/results//generic/798.out.bad 2026-08-21 12:30:39.831381108 -0400
> @@ -1,16 +1,16 @@
> QA output created by 798
> === Test with 1 pages ===
> -Cached: 1, Dirty: 1, Writeback: 0, Evicted: 0, Recently Evicted: 0
> +Cached: 1, Dirty: 0, Writeback: 0, Evicted: 0, Recently Evicted: 0
> Cached: 1, Dirty: 0, Writeback: 0, Evicted: 0, Recently Evicted: 0
> === Test with 2 pages ===
> -Cached: 2, Dirty: 2, Writeback: 0, Evicted: 0, Recently Evicted: 0
> ...
>
> Exclude 'nfs' from running this test.
>
> Signed-off-by: Avinesh Kumar <avinesh.kumar@suse.com>
> ---
> tests/generic/798 | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/tests/generic/798 b/tests/generic/798
> index 0fe37646..80b2acc9 100755
> --- a/tests/generic/798
> +++ b/tests/generic/798
> @@ -16,6 +16,12 @@ _require_scratch
> _exclude_scratch_mount_option "dax"
> _exclude_scratch_mount_option "sync"
>
> +# NFS flushes dirty data back to the server on close() as part of its
> +# close-to-open cache consistency model, so a page written and closed in
> +# one xfs_io invocation is no longer dirty by the time cachestat runs in
> +# a later invocation.
> +_exclude_fs nfs
Could you just chain all the xfs_io commands together into a single
invocation?
$XFS_IO_PROG -f \
-c "pwrite -b $pagesize 0 $size" \
-c "cachestat 0 $size" \
-c "fsync" \
-c "cachestat 0 $size" \
$SCRATCH_MNT/foobar
to solve this problem?
--D
> +
> pagesize=$(_get_page_size)
>
> _scratch_mkfs > /dev/null
> --
> 2.55.0
>
>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] generic/798: exclude nfs from cachestat dirty page reporting test
2026-08-24 16:15 ` Darrick J. Wong
@ 2026-08-26 14:39 ` Avinesh Kumar
2026-08-26 15:01 ` [PATCH v2] generic/798: chain xfs_io commands into a single invocation Avinesh Kumar
1 sibling, 0 replies; 9+ messages in thread
From: Avinesh Kumar @ 2026-08-26 14:39 UTC (permalink / raw)
To: Darrick J. Wong; +Cc: fstests, wqu
Hello Darrick,
>> diff --git a/tests/generic/798 b/tests/generic/798
>> index 0fe37646..80b2acc9 100755
>> --- a/tests/generic/798
>> +++ b/tests/generic/798
>> @@ -16,6 +16,12 @@ _require_scratch
>> _exclude_scratch_mount_option "dax"
>> _exclude_scratch_mount_option "sync"
>>
>> +# NFS flushes dirty data back to the server on close() as part of its
>> +# close-to-open cache consistency model, so a page written and closed in
>> +# one xfs_io invocation is no longer dirty by the time cachestat runs in
>> +# a later invocation.
>> +_exclude_fs nfs
>
> Could you just chain all the xfs_io commands together into a single
> invocation?
>
> $XFS_IO_PROG -f \
> -c "pwrite -b $pagesize 0 $size" \
> -c "cachestat 0 $size" \
> -c "fsync" \
> -c "cachestat 0 $size" \
> $SCRATCH_MNT/foobar
>
> to solve this problem?
>
Thanks for the review and this suggestion. Chaining all xfs_io commands
together seems to work, with also passing '-q' to pwrite to suppress
these lines -
+wrote 4096/4096 bytes at offset 0
+4 KiB, 1 ops; 0.0000 sec (355.114 MiB/sec and 90909.0909 ops/sec)
I am sending revised patch.
Regards,
Avinesh
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v2] generic/798: chain xfs_io commands into a single invocation
2026-08-24 16:15 ` Darrick J. Wong
2026-08-26 14:39 ` Avinesh Kumar
@ 2026-08-26 15:01 ` Avinesh Kumar
2026-08-26 15:20 ` Darrick J. Wong
1 sibling, 1 reply; 9+ messages in thread
From: Avinesh Kumar @ 2026-08-26 15:01 UTC (permalink / raw)
To: fstests; +Cc: wqu, Darrick J. Wong
From: Avinesh Kumar <avinesh.kumar@suse.com>
The write, cachestat, fsync, and cachestat calls were each run as
separate xfs_io invocations, closing and reopening the file in
between. Some filesystems flush dirty data back on close(), clearing
the dirty bit before the first cachestat ever ran, causing test failure
- output mismatch (see /opt/xfstests/results//generic/798.out.bad)
--- tests/generic/798.out 2026-08-20 05:25:39.000000000 -0400
+++ /opt/xfstests/results//generic/798.out.bad 2026-08-21 12:30:39.831381108 -0400
@@ -1,16 +1,16 @@
QA output created by 798
=== Test with 1 pages ===
-Cached: 1, Dirty: 1, Writeback: 0, Evicted: 0, Recently Evicted: 0
+Cached: 1, Dirty: 0, Writeback: 0, Evicted: 0, Recently Evicted: 0
Cached: 1, Dirty: 0, Writeback: 0, Evicted: 0, Recently Evicted: 0
=== Test with 2 pages ===
-Cached: 2, Dirty: 2, Writeback: 0, Evicted: 0, Recently Evicted: 0
...
Run the whole sequence on one open file descriptor instead by chaining
all xfs_io commands in single invocation.
Suggested-by: "Darrick J. Wong" <djwong@kernel.org>
Signed-off-by: Avinesh Kumar <avinesh.kumar@suse.com>
---
tests/generic/798 | 18 ++++++++++++++----
1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/tests/generic/798 b/tests/generic/798
index 0fe37646..171878ee 100755
--- a/tests/generic/798
+++ b/tests/generic/798
@@ -27,12 +27,22 @@ for num_page in 1 2 4 8 16; do
echo "=== Test with $num_page pages ==="
rm -f $SCRATCH_MNT/foobar
- $XFS_IO_PROG -f -c "pwrite -b $pagesize 0 $size" $SCRATCH_MNT/foobar > /dev/null
- # Basic cached number reporting
- $XFS_IO_PROG -c "cachestat 0 $size" $SCRATCH_MNT/foobar
- # Test dirty page number reporting after a fsync.
+ # Basic cached number reporting and test dirty page number
+ # reporting after a fsync.
+ #
+ # Do the whole write+cachestat+fsync+cachestat sequence in a
+ # single xfs_io invocation. Some filesystems (e.g. NFS) flush
+ # dirty data back to the server as part of their own close()-time
+ # cache consistency, which would clear the dirty bits before the
+ # second xfs_io process ever got to run cachestat.
$XFS_IO_PROG -c "fsync" -c "cachestat 0 $size" $SCRATCH_MNT/foobar
+ $XFS_IO_PROG -f \
+ -c "pwrite -q -b $pagesize 0 $size" \
+ -c "cachestat 0 $size" \
+ -c "fsync" \
+ -c "cachestat 0 $size" \
+ $SCRATCH_MNT/foobar
done
_scratch_unmount
--
2.55.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v2] generic/798: chain xfs_io commands into a single invocation
2026-08-26 15:01 ` [PATCH v2] generic/798: chain xfs_io commands into a single invocation Avinesh Kumar
@ 2026-08-26 15:20 ` Darrick J. Wong
2026-08-26 15:54 ` [PATCH v3] " Avinesh Kumar
0 siblings, 1 reply; 9+ messages in thread
From: Darrick J. Wong @ 2026-08-26 15:20 UTC (permalink / raw)
To: Avinesh Kumar; +Cc: fstests, wqu
On Wed, Aug 26, 2026 at 05:01:14PM +0200, Avinesh Kumar wrote:
> From: Avinesh Kumar <avinesh.kumar@suse.com>
>
> The write, cachestat, fsync, and cachestat calls were each run as
> separate xfs_io invocations, closing and reopening the file in
> between. Some filesystems flush dirty data back on close(), clearing
> the dirty bit before the first cachestat ever ran, causing test failure
>
> - output mismatch (see /opt/xfstests/results//generic/798.out.bad)
> --- tests/generic/798.out 2026-08-20 05:25:39.000000000 -0400
> +++ /opt/xfstests/results//generic/798.out.bad 2026-08-21 12:30:39.831381108 -0400
> @@ -1,16 +1,16 @@
> QA output created by 798
> === Test with 1 pages ===
> -Cached: 1, Dirty: 1, Writeback: 0, Evicted: 0, Recently Evicted: 0
> +Cached: 1, Dirty: 0, Writeback: 0, Evicted: 0, Recently Evicted: 0
> Cached: 1, Dirty: 0, Writeback: 0, Evicted: 0, Recently Evicted: 0
> === Test with 2 pages ===
> -Cached: 2, Dirty: 2, Writeback: 0, Evicted: 0, Recently Evicted: 0
> ...
>
> Run the whole sequence on one open file descriptor instead by chaining
> all xfs_io commands in single invocation.
>
> Suggested-by: "Darrick J. Wong" <djwong@kernel.org>
> Signed-off-by: Avinesh Kumar <avinesh.kumar@suse.com>
> ---
> tests/generic/798 | 18 ++++++++++++++----
> 1 file changed, 14 insertions(+), 4 deletions(-)
>
> diff --git a/tests/generic/798 b/tests/generic/798
> index 0fe37646..171878ee 100755
> --- a/tests/generic/798
> +++ b/tests/generic/798
> @@ -27,12 +27,22 @@ for num_page in 1 2 4 8 16; do
> echo "=== Test with $num_page pages ==="
>
> rm -f $SCRATCH_MNT/foobar
> - $XFS_IO_PROG -f -c "pwrite -b $pagesize 0 $size" $SCRATCH_MNT/foobar > /dev/null
> - # Basic cached number reporting
> - $XFS_IO_PROG -c "cachestat 0 $size" $SCRATCH_MNT/foobar
>
> - # Test dirty page number reporting after a fsync.
> + # Basic cached number reporting and test dirty page number
> + # reporting after a fsync.
> + #
> + # Do the whole write+cachestat+fsync+cachestat sequence in a
> + # single xfs_io invocation. Some filesystems (e.g. NFS) flush
> + # dirty data back to the server as part of their own close()-time
> + # cache consistency, which would clear the dirty bits before the
> + # second xfs_io process ever got to run cachestat.
> $XFS_IO_PROG -c "fsync" -c "cachestat 0 $size" $SCRATCH_MNT/foobar
> + $XFS_IO_PROG -f \
Not sure why there are two $XFS_IO_PROG invocations here??
Also the first line of the second invocation should only be indented one
tab, not two.
--D
> + -c "pwrite -q -b $pagesize 0 $size" \
> + -c "cachestat 0 $size" \
> + -c "fsync" \
> + -c "cachestat 0 $size" \
> + $SCRATCH_MNT/foobar
> done
>
> _scratch_unmount
> --
> 2.55.0
>
>
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v3] generic/798: chain xfs_io commands into a single invocation
2026-08-26 15:20 ` Darrick J. Wong
@ 2026-08-26 15:54 ` Avinesh Kumar
2026-08-26 16:15 ` Darrick J. Wong
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Avinesh Kumar @ 2026-08-26 15:54 UTC (permalink / raw)
To: djwong, fstests; +Cc: avinesh.kumar, wqu
From: Avinesh Kumar <avinesh.kumar@suse.com>
The write, cachestat, fsync, and cachestat calls were each run as
separate xfs_io invocations, closing and reopening the file in
between. Some filesystems flush dirty data back on close(), clearing
the dirty bit before the first cachestat ever ran, causing test failure
- output mismatch (see /opt/xfstests/results//generic/798.out.bad)
--- tests/generic/798.out 2026-08-20 05:25:39.000000000 -0400
+++ /opt/xfstests/results//generic/798.out.bad 2026-08-21 12:30:39.831381108 -0400
@@ -1,16 +1,16 @@
QA output created by 798
=== Test with 1 pages ===
-Cached: 1, Dirty: 1, Writeback: 0, Evicted: 0, Recently Evicted: 0
+Cached: 1, Dirty: 0, Writeback: 0, Evicted: 0, Recently Evicted: 0
Cached: 1, Dirty: 0, Writeback: 0, Evicted: 0, Recently Evicted: 0
=== Test with 2 pages ===
-Cached: 2, Dirty: 2, Writeback: 0, Evicted: 0, Recently Evicted: 0
...
Run the whole sequence on one open file descriptor instead by chaining
all xfs_io commands in single invocation.
Suggested-by: "Darrick J. Wong" <djwong@kernel.org>
Signed-off-by: Avinesh Kumar <avinesh.kumar@suse.com>
---
tests/generic/798 | 19 ++++++++++++++-----
1 file changed, 14 insertions(+), 5 deletions(-)
diff --git a/tests/generic/798 b/tests/generic/798
index 0fe37646..5c81b429 100755
--- a/tests/generic/798
+++ b/tests/generic/798
@@ -27,12 +27,21 @@ for num_page in 1 2 4 8 16; do
echo "=== Test with $num_page pages ==="
rm -f $SCRATCH_MNT/foobar
- $XFS_IO_PROG -f -c "pwrite -b $pagesize 0 $size" $SCRATCH_MNT/foobar > /dev/null
- # Basic cached number reporting
- $XFS_IO_PROG -c "cachestat 0 $size" $SCRATCH_MNT/foobar
- # Test dirty page number reporting after a fsync.
- $XFS_IO_PROG -c "fsync" -c "cachestat 0 $size" $SCRATCH_MNT/foobar
+ # Basic cached number reporting and test dirty page number
+ # reporting after a fsync.
+ #
+ # Do the whole write+cachestat+fsync+cachestat sequence in a
+ # single xfs_io invocation. Some filesystems (e.g. NFS) flush
+ # dirty data back to the server as part of their own close()-time
+ # cache consistency, which would clear the dirty bits before the
+ # second xfs_io process ever got to run cachestat.
+ $XFS_IO_PROG -f \
+ -c "pwrite -q -b $pagesize 0 $size" \
+ -c "cachestat 0 $size" \
+ -c "fsync" \
+ -c "cachestat 0 $size" \
+ $SCRATCH_MNT/foobar
done
_scratch_unmount
--
2.55.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v3] generic/798: chain xfs_io commands into a single invocation
2026-08-26 15:54 ` [PATCH v3] " Avinesh Kumar
@ 2026-08-26 16:15 ` Darrick J. Wong
2026-08-26 17:00 ` Zorro Lang
2026-08-26 22:13 ` Qu Wenruo
2 siblings, 0 replies; 9+ messages in thread
From: Darrick J. Wong @ 2026-08-26 16:15 UTC (permalink / raw)
To: Avinesh Kumar; +Cc: fstests, wqu
On Wed, Aug 26, 2026 at 05:54:23PM +0200, Avinesh Kumar wrote:
> From: Avinesh Kumar <avinesh.kumar@suse.com>
>
> The write, cachestat, fsync, and cachestat calls were each run as
> separate xfs_io invocations, closing and reopening the file in
> between. Some filesystems flush dirty data back on close(), clearing
> the dirty bit before the first cachestat ever ran, causing test failure
>
> - output mismatch (see /opt/xfstests/results//generic/798.out.bad)
> --- tests/generic/798.out 2026-08-20 05:25:39.000000000 -0400
> +++ /opt/xfstests/results//generic/798.out.bad 2026-08-21 12:30:39.831381108 -0400
> @@ -1,16 +1,16 @@
> QA output created by 798
> === Test with 1 pages ===
> -Cached: 1, Dirty: 1, Writeback: 0, Evicted: 0, Recently Evicted: 0
> +Cached: 1, Dirty: 0, Writeback: 0, Evicted: 0, Recently Evicted: 0
> Cached: 1, Dirty: 0, Writeback: 0, Evicted: 0, Recently Evicted: 0
> === Test with 2 pages ===
> -Cached: 2, Dirty: 2, Writeback: 0, Evicted: 0, Recently Evicted: 0
> ...
>
> Run the whole sequence on one open file descriptor instead by chaining
> all xfs_io commands in single invocation.
>
> Suggested-by: "Darrick J. Wong" <djwong@kernel.org>
> Signed-off-by: Avinesh Kumar <avinesh.kumar@suse.com>
Looks good now!
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
--D
> ---
> tests/generic/798 | 19 ++++++++++++++-----
> 1 file changed, 14 insertions(+), 5 deletions(-)
>
> diff --git a/tests/generic/798 b/tests/generic/798
> index 0fe37646..5c81b429 100755
> --- a/tests/generic/798
> +++ b/tests/generic/798
> @@ -27,12 +27,21 @@ for num_page in 1 2 4 8 16; do
> echo "=== Test with $num_page pages ==="
>
> rm -f $SCRATCH_MNT/foobar
> - $XFS_IO_PROG -f -c "pwrite -b $pagesize 0 $size" $SCRATCH_MNT/foobar > /dev/null
> - # Basic cached number reporting
> - $XFS_IO_PROG -c "cachestat 0 $size" $SCRATCH_MNT/foobar
>
> - # Test dirty page number reporting after a fsync.
> - $XFS_IO_PROG -c "fsync" -c "cachestat 0 $size" $SCRATCH_MNT/foobar
> + # Basic cached number reporting and test dirty page number
> + # reporting after a fsync.
> + #
> + # Do the whole write+cachestat+fsync+cachestat sequence in a
> + # single xfs_io invocation. Some filesystems (e.g. NFS) flush
> + # dirty data back to the server as part of their own close()-time
> + # cache consistency, which would clear the dirty bits before the
> + # second xfs_io process ever got to run cachestat.
> + $XFS_IO_PROG -f \
> + -c "pwrite -q -b $pagesize 0 $size" \
> + -c "cachestat 0 $size" \
> + -c "fsync" \
> + -c "cachestat 0 $size" \
> + $SCRATCH_MNT/foobar
> done
>
> _scratch_unmount
> --
> 2.55.0
>
>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v3] generic/798: chain xfs_io commands into a single invocation
2026-08-26 15:54 ` [PATCH v3] " Avinesh Kumar
2026-08-26 16:15 ` Darrick J. Wong
@ 2026-08-26 17:00 ` Zorro Lang
2026-08-26 22:13 ` Qu Wenruo
2 siblings, 0 replies; 9+ messages in thread
From: Zorro Lang @ 2026-08-26 17:00 UTC (permalink / raw)
To: Avinesh Kumar; +Cc: djwong, fstests, wqu
On Wed, Aug 26, 2026 at 05:54:23PM +0200, Avinesh Kumar wrote:
> From: Avinesh Kumar <avinesh.kumar@suse.com>
>
> The write, cachestat, fsync, and cachestat calls were each run as
> separate xfs_io invocations, closing and reopening the file in
> between. Some filesystems flush dirty data back on close(), clearing
> the dirty bit before the first cachestat ever ran, causing test failure
>
> - output mismatch (see /opt/xfstests/results//generic/798.out.bad)
> --- tests/generic/798.out 2026-08-20 05:25:39.000000000 -0400
> +++ /opt/xfstests/results//generic/798.out.bad 2026-08-21 12:30:39.831381108 -0400
> @@ -1,16 +1,16 @@
> QA output created by 798
> === Test with 1 pages ===
> -Cached: 1, Dirty: 1, Writeback: 0, Evicted: 0, Recently Evicted: 0
> +Cached: 1, Dirty: 0, Writeback: 0, Evicted: 0, Recently Evicted: 0
> Cached: 1, Dirty: 0, Writeback: 0, Evicted: 0, Recently Evicted: 0
> === Test with 2 pages ===
> -Cached: 2, Dirty: 2, Writeback: 0, Evicted: 0, Recently Evicted: 0
> ...
>
> Run the whole sequence on one open file descriptor instead by chaining
> all xfs_io commands in single invocation.
>
> Suggested-by: "Darrick J. Wong" <djwong@kernel.org>
> Signed-off-by: Avinesh Kumar <avinesh.kumar@suse.com>
> ---
This change is good to me,
Reviewed-by: Zorro Lang <zlang@kernel.org>
> tests/generic/798 | 19 ++++++++++++++-----
> 1 file changed, 14 insertions(+), 5 deletions(-)
>
> diff --git a/tests/generic/798 b/tests/generic/798
> index 0fe37646..5c81b429 100755
> --- a/tests/generic/798
> +++ b/tests/generic/798
> @@ -27,12 +27,21 @@ for num_page in 1 2 4 8 16; do
> echo "=== Test with $num_page pages ==="
>
> rm -f $SCRATCH_MNT/foobar
> - $XFS_IO_PROG -f -c "pwrite -b $pagesize 0 $size" $SCRATCH_MNT/foobar > /dev/null
> - # Basic cached number reporting
> - $XFS_IO_PROG -c "cachestat 0 $size" $SCRATCH_MNT/foobar
>
> - # Test dirty page number reporting after a fsync.
> - $XFS_IO_PROG -c "fsync" -c "cachestat 0 $size" $SCRATCH_MNT/foobar
> + # Basic cached number reporting and test dirty page number
> + # reporting after a fsync.
> + #
> + # Do the whole write+cachestat+fsync+cachestat sequence in a
> + # single xfs_io invocation. Some filesystems (e.g. NFS) flush
> + # dirty data back to the server as part of their own close()-time
> + # cache consistency, which would clear the dirty bits before the
> + # second xfs_io process ever got to run cachestat.
> + $XFS_IO_PROG -f \
> + -c "pwrite -q -b $pagesize 0 $size" \
> + -c "cachestat 0 $size" \
> + -c "fsync" \
> + -c "cachestat 0 $size" \
> + $SCRATCH_MNT/foobar
> done
>
> _scratch_unmount
> --
> 2.55.0
>
>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v3] generic/798: chain xfs_io commands into a single invocation
2026-08-26 15:54 ` [PATCH v3] " Avinesh Kumar
2026-08-26 16:15 ` Darrick J. Wong
2026-08-26 17:00 ` Zorro Lang
@ 2026-08-26 22:13 ` Qu Wenruo
2 siblings, 0 replies; 9+ messages in thread
From: Qu Wenruo @ 2026-08-26 22:13 UTC (permalink / raw)
To: Avinesh Kumar, djwong, fstests; +Cc: wqu
在 2026/8/27 01:24, Avinesh Kumar 写道:
> From: Avinesh Kumar <avinesh.kumar@suse.com>
>
> The write, cachestat, fsync, and cachestat calls were each run as
> separate xfs_io invocations, closing and reopening the file in
> between. Some filesystems flush dirty data back on close(), clearing
> the dirty bit before the first cachestat ever ran, causing test failure
>
> - output mismatch (see /opt/xfstests/results//generic/798.out.bad)
> --- tests/generic/798.out 2026-08-20 05:25:39.000000000 -0400
> +++ /opt/xfstests/results//generic/798.out.bad 2026-08-21 12:30:39.831381108 -0400
> @@ -1,16 +1,16 @@
> QA output created by 798
> === Test with 1 pages ===
> -Cached: 1, Dirty: 1, Writeback: 0, Evicted: 0, Recently Evicted: 0
> +Cached: 1, Dirty: 0, Writeback: 0, Evicted: 0, Recently Evicted: 0
> Cached: 1, Dirty: 0, Writeback: 0, Evicted: 0, Recently Evicted: 0
> === Test with 2 pages ===
> -Cached: 2, Dirty: 2, Writeback: 0, Evicted: 0, Recently Evicted: 0
> ...
>
> Run the whole sequence on one open file descriptor instead by chaining
> all xfs_io commands in single invocation.
>
> Suggested-by: "Darrick J. Wong" <djwong@kernel.org>
> Signed-off-by: Avinesh Kumar <avinesh.kumar@suse.com>
Reviewed-by: Qu Wenruo <wqu@suse.com>
Thanks,
Qu
> ---
> tests/generic/798 | 19 ++++++++++++++-----
> 1 file changed, 14 insertions(+), 5 deletions(-)
>
> diff --git a/tests/generic/798 b/tests/generic/798
> index 0fe37646..5c81b429 100755
> --- a/tests/generic/798
> +++ b/tests/generic/798
> @@ -27,12 +27,21 @@ for num_page in 1 2 4 8 16; do
> echo "=== Test with $num_page pages ==="
>
> rm -f $SCRATCH_MNT/foobar
> - $XFS_IO_PROG -f -c "pwrite -b $pagesize 0 $size" $SCRATCH_MNT/foobar > /dev/null
> - # Basic cached number reporting
> - $XFS_IO_PROG -c "cachestat 0 $size" $SCRATCH_MNT/foobar
>
> - # Test dirty page number reporting after a fsync.
> - $XFS_IO_PROG -c "fsync" -c "cachestat 0 $size" $SCRATCH_MNT/foobar
> + # Basic cached number reporting and test dirty page number
> + # reporting after a fsync.
> + #
> + # Do the whole write+cachestat+fsync+cachestat sequence in a
> + # single xfs_io invocation. Some filesystems (e.g. NFS) flush
> + # dirty data back to the server as part of their own close()-time
> + # cache consistency, which would clear the dirty bits before the
> + # second xfs_io process ever got to run cachestat.
> + $XFS_IO_PROG -f \
> + -c "pwrite -q -b $pagesize 0 $size" \
> + -c "cachestat 0 $size" \
> + -c "fsync" \
> + -c "cachestat 0 $size" \
> + $SCRATCH_MNT/foobar
> done
>
> _scratch_unmount
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2026-08-26 22:13 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-24 15:11 [PATCH] generic/798: exclude nfs from cachestat dirty page reporting test Avinesh Kumar
2026-08-24 16:15 ` Darrick J. Wong
2026-08-26 14:39 ` Avinesh Kumar
2026-08-26 15:01 ` [PATCH v2] generic/798: chain xfs_io commands into a single invocation Avinesh Kumar
2026-08-26 15:20 ` Darrick J. Wong
2026-08-26 15:54 ` [PATCH v3] " Avinesh Kumar
2026-08-26 16:15 ` Darrick J. Wong
2026-08-26 17:00 ` Zorro Lang
2026-08-26 22:13 ` Qu Wenruo
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox