All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] fstests: generic/362: remove the old file to reflect new mount options
@ 2026-05-26  7:00 Qu Wenruo
  2026-05-27  6:34 ` Christoph Hellwig
  2026-05-27 14:26 ` Filipe Manana
  0 siblings, 2 replies; 7+ messages in thread
From: Qu Wenruo @ 2026-05-26  7:00 UTC (permalink / raw)
  To: fstests, linux-btrfs

[HIDDEN BUG]
There is a btrfs bug that will only trigger on newly formated TEST_DEV,
with mount option "nodatasum":

 FSTYP         -- btrfs
 PLATFORM      -- Linux/x86_64 btrfs-vm 7.1.0-rc4-custom+ #381 SMP PREEMPT_DYNAMIC Tue May 26 10:47:14 ACST 2026
 MKFS_OPTIONS  -- -O bgt -K /dev/mapper/test-scratch1
 MOUNT_OPTIONS -- -o nodatasum /dev/mapper/test-scratch1 /mnt/scratch

 generic/362  0s ... - output mismatch (see /home/adam/xfstests/results//generic/362.out.bad)
     --- tests/generic/362.out	2024-08-24 15:31:37.200000000 +0930
     +++ /home/adam/xfstests/results//generic/362.out.bad	2026-05-26 16:24:40.201201849 +0930
     @@ -1,2 +1,3 @@
      QA output created by 362
     +First write failed: Input/output error
      Silence is golden
     ...
     (Run 'diff -u /home/adam/xfstests/tests/generic/362.out /home/adam/xfstests/results//generic/362.out.bad'  to see the entire diff)

But if one has formated TEST_DEV, run test with default mount option,
then change the mount option to "nodatasum", the test will not fail
anymore:

 FSTYP         -- btrfs
 PLATFORM      -- Linux/x86_64 btrfs-vm 7.1.0-rc4-custom+ #381 SMP PREEMPT_DYNAMIC Tue May 26 10:47:14 ACST 2026
 MKFS_OPTIONS  -- -O bgt -K /dev/mapper/test-scratch1
 MOUNT_OPTIONS -- /dev/mapper/test-scratch1 /mnt/scratch

 generic/362  0s ...  0s
 Ran: generic/362
 Passed all 1 tests

 FSTYP         -- btrfs
 PLATFORM      -- Linux/x86_64 btrfs-vm 7.1.0-rc4-custom+ #381 SMP PREEMPT_DYNAMIC Tue May 26 10:47:14 ACST 2026
 MKFS_OPTIONS  -- -O bgt -K /dev/mapper/test-scratch1
 MOUNT_OPTIONS -- -o nodatasum /dev/mapper/test-scratch1 /mnt/scratch

 generic/362  0s ...  0s
 Ran: generic/362
 Passed all 1 tests

[CAUSE]
Btrfs' nodatasum mount option only affect new files, but the test case
itself is using TEST_DEV, and never delete the file
"$TEST_DIR/dio-append-buf-fault"

So if the file is created with default mount option, then all later
"nodatasum" mount option will not affect that file, thus hide the test
failure.

[FIX]
Always delete the target file "$TEST_DIR/dio-append-buf-fault" before
running dio-append-buf-fault command.

So that the new target file is always newly created and will follow
btrfs' new mount option and expose the failure for nodatasum.

Signed-off-by: Qu Wenruo <wqu@suse.com>
---
I'm already looking into the test failure, because it's mostly hidden by
the btrfs' falling back to buffered IO behavior.

With the incoming IOMAP_DIO_BOUNCE usage inside btrfs, it will expose
the failure unconditionally.
---
 tests/generic/362 | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/tests/generic/362 b/tests/generic/362
index 0cfaa726..86191e57 100755
--- a/tests/generic/362
+++ b/tests/generic/362
@@ -20,6 +20,10 @@ _require_test_program dio-append-buf-fault
 _fixed_by_fs_commit btrfs 939b656bc8ab \
 	"btrfs: fix corruption after buffer fault in during direct IO append write"
 
+# Remove the existing file, so a new inode can be created, and will be
+# affected by changed mount options.
+rm -rf $TEST_DIR/dio-append-buf-fault
+
 # On error the test program writes messages to stderr, causing a golden output
 # mismatch and making the test fail.
 $here/src/dio-append-buf-fault $TEST_DIR/dio-append-buf-fault
-- 
2.51.2


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH] fstests: generic/362: remove the old file to reflect new mount options
  2026-05-26  7:00 [PATCH] fstests: generic/362: remove the old file to reflect new mount options Qu Wenruo
@ 2026-05-27  6:34 ` Christoph Hellwig
  2026-05-27  6:50   ` Qu Wenruo
  2026-05-27 14:26 ` Filipe Manana
  1 sibling, 1 reply; 7+ messages in thread
From: Christoph Hellwig @ 2026-05-27  6:34 UTC (permalink / raw)
  To: Qu Wenruo; +Cc: fstests, linux-btrfs

On Tue, May 26, 2026 at 04:30:55PM +0930, Qu Wenruo wrote:
>       Silence is golden
>      ...
>      (Run 'diff -u /home/adam/xfstests/tests/generic/362.out /home/adam/xfstests/results//generic/362.out.bad'  to see the entire diff)
> 
> But if one has formated TEST_DEV, run test with default mount option,
> then change the mount option to "nodatasum", the test will not fail
> anymore:

> [FIX]
> Always delete the target file "$TEST_DIR/dio-append-buf-fault" before
> running dio-append-buf-fault command.
> 
> So that the new target file is always newly created and will follow
> btrfs' new mount option and expose the failure for nodatasum.

I'd rather add a copy of the test that runs on the scratch device
that can control the environment.  Or maybe just change the test
to use the scratch device?


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] fstests: generic/362: remove the old file to reflect new mount options
  2026-05-27  6:34 ` Christoph Hellwig
@ 2026-05-27  6:50   ` Qu Wenruo
  2026-05-27 13:03     ` Christoph Hellwig
  0 siblings, 1 reply; 7+ messages in thread
From: Qu Wenruo @ 2026-05-27  6:50 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: fstests, linux-btrfs



在 2026/5/27 16:04, Christoph Hellwig 写道:
> On Tue, May 26, 2026 at 04:30:55PM +0930, Qu Wenruo wrote:
>>        Silence is golden
>>       ...
>>       (Run 'diff -u /home/adam/xfstests/tests/generic/362.out /home/adam/xfstests/results//generic/362.out.bad'  to see the entire diff)
>>
>> But if one has formated TEST_DEV, run test with default mount option,
>> then change the mount option to "nodatasum", the test will not fail
>> anymore:
> 
>> [FIX]
>> Always delete the target file "$TEST_DIR/dio-append-buf-fault" before
>> running dio-append-buf-fault command.
>>
>> So that the new target file is always newly created and will follow
>> btrfs' new mount option and expose the failure for nodatasum.
> 
> I'd rather add a copy of the test that runs on the scratch device
> that can control the environment.  Or maybe just change the test
> to use the scratch device?

I'm completely happy with using scratch device instead of test dev.

If no special reason to use test dev, the next update will go scratch 
dev instead.

Thanks,
Qu

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] fstests: generic/362: remove the old file to reflect new mount options
  2026-05-27  6:50   ` Qu Wenruo
@ 2026-05-27 13:03     ` Christoph Hellwig
  2026-05-27 21:42       ` Qu Wenruo
  0 siblings, 1 reply; 7+ messages in thread
From: Christoph Hellwig @ 2026-05-27 13:03 UTC (permalink / raw)
  To: Qu Wenruo; +Cc: Christoph Hellwig, fstests, linux-btrfs

On Wed, May 27, 2026 at 04:20:38PM +0930, Qu Wenruo wrote:
> > I'd rather add a copy of the test that runs on the scratch device
> > that can control the environment.  Or maybe just change the test
> > to use the scratch device?
> 
> I'm completely happy with using scratch device instead of test dev.
> 
> If no special reason to use test dev, the next update will go scratch dev
> instead.

I went back and re-read this.  What is the special mount option you
change?   If you want to always exercise this as nocow, maybe add a new
btrfs test that is a copy and uses the scratch device?  Or am I
misunderstanding something?


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] fstests: generic/362: remove the old file to reflect new mount options
  2026-05-26  7:00 [PATCH] fstests: generic/362: remove the old file to reflect new mount options Qu Wenruo
  2026-05-27  6:34 ` Christoph Hellwig
@ 2026-05-27 14:26 ` Filipe Manana
  1 sibling, 0 replies; 7+ messages in thread
From: Filipe Manana @ 2026-05-27 14:26 UTC (permalink / raw)
  To: Qu Wenruo; +Cc: fstests, linux-btrfs

On Tue, May 26, 2026 at 8:02 AM Qu Wenruo <wqu@suse.com> wrote:
>
> [HIDDEN BUG]
> There is a btrfs bug that will only trigger on newly formated TEST_DEV,
> with mount option "nodatasum":
>
>  FSTYP         -- btrfs
>  PLATFORM      -- Linux/x86_64 btrfs-vm 7.1.0-rc4-custom+ #381 SMP PREEMPT_DYNAMIC Tue May 26 10:47:14 ACST 2026
>  MKFS_OPTIONS  -- -O bgt -K /dev/mapper/test-scratch1
>  MOUNT_OPTIONS -- -o nodatasum /dev/mapper/test-scratch1 /mnt/scratch
>
>  generic/362  0s ... - output mismatch (see /home/adam/xfstests/results//generic/362.out.bad)
>      --- tests/generic/362.out  2024-08-24 15:31:37.200000000 +0930
>      +++ /home/adam/xfstests/results//generic/362.out.bad       2026-05-26 16:24:40.201201849 +0930
>      @@ -1,2 +1,3 @@
>       QA output created by 362
>      +First write failed: Input/output error
>       Silence is golden
>      ...
>      (Run 'diff -u /home/adam/xfstests/tests/generic/362.out /home/adam/xfstests/results//generic/362.out.bad'  to see the entire diff)
>
> But if one has formated TEST_DEV, run test with default mount option,
> then change the mount option to "nodatasum", the test will not fail
> anymore:
>
>  FSTYP         -- btrfs
>  PLATFORM      -- Linux/x86_64 btrfs-vm 7.1.0-rc4-custom+ #381 SMP PREEMPT_DYNAMIC Tue May 26 10:47:14 ACST 2026
>  MKFS_OPTIONS  -- -O bgt -K /dev/mapper/test-scratch1
>  MOUNT_OPTIONS -- /dev/mapper/test-scratch1 /mnt/scratch
>
>  generic/362  0s ...  0s
>  Ran: generic/362
>  Passed all 1 tests
>
>  FSTYP         -- btrfs
>  PLATFORM      -- Linux/x86_64 btrfs-vm 7.1.0-rc4-custom+ #381 SMP PREEMPT_DYNAMIC Tue May 26 10:47:14 ACST 2026
>  MKFS_OPTIONS  -- -O bgt -K /dev/mapper/test-scratch1
>  MOUNT_OPTIONS -- -o nodatasum /dev/mapper/test-scratch1 /mnt/scratch
>
>  generic/362  0s ...  0s
>  Ran: generic/362
>  Passed all 1 tests
>
> [CAUSE]
> Btrfs' nodatasum mount option only affect new files, but the test case
> itself is using TEST_DEV, and never delete the file
> "$TEST_DIR/dio-append-buf-fault"
>
> So if the file is created with default mount option, then all later
> "nodatasum" mount option will not affect that file, thus hide the test
> failure.
>
> [FIX]
> Always delete the target file "$TEST_DIR/dio-append-buf-fault" before
> running dio-append-buf-fault command.
>
> So that the new target file is always newly created and will follow
> btrfs' new mount option and expose the failure for nodatasum.
>
> Signed-off-by: Qu Wenruo <wqu@suse.com>
> ---
> I'm already looking into the test failure, because it's mostly hidden by
> the btrfs' falling back to buffered IO behavior.
>
> With the incoming IOMAP_DIO_BOUNCE usage inside btrfs, it will expose
> the failure unconditionally.
> ---
>  tests/generic/362 | 4 ++++
>  1 file changed, 4 insertions(+)
>
> diff --git a/tests/generic/362 b/tests/generic/362
> index 0cfaa726..86191e57 100755
> --- a/tests/generic/362
> +++ b/tests/generic/362
> @@ -20,6 +20,10 @@ _require_test_program dio-append-buf-fault
>  _fixed_by_fs_commit btrfs 939b656bc8ab \
>         "btrfs: fix corruption after buffer fault in during direct IO append write"
>
> +# Remove the existing file, so a new inode can be created, and will be
> +# affected by changed mount options.
> +rm -rf $TEST_DIR/dio-append-buf-fault

We can just remove the file in a _cleanup function - that's what most
other tests that exercise faults during direct IO do, like
generic/647.
Some tests like this one are missing that, and there's at least one
more: generic/708. We had several similar tests, and many were copied
from another test.

Thanks.

> +
>  # On error the test program writes messages to stderr, causing a golden output
>  # mismatch and making the test fail.
>  $here/src/dio-append-buf-fault $TEST_DIR/dio-append-buf-fault
> --
> 2.51.2
>
>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] fstests: generic/362: remove the old file to reflect new mount options
  2026-05-27 13:03     ` Christoph Hellwig
@ 2026-05-27 21:42       ` Qu Wenruo
  2026-05-29  9:02         ` Zorro Lang
  0 siblings, 1 reply; 7+ messages in thread
From: Qu Wenruo @ 2026-05-27 21:42 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: fstests, linux-btrfs



在 2026/5/27 22:33, Christoph Hellwig 写道:
> On Wed, May 27, 2026 at 04:20:38PM +0930, Qu Wenruo wrote:
>>> I'd rather add a copy of the test that runs on the scratch device
>>> that can control the environment.  Or maybe just change the test
>>> to use the scratch device?
>>
>> I'm completely happy with using scratch device instead of test dev.
>>
>> If no special reason to use test dev, the next update will go scratch dev
>> instead.
> 
> I went back and re-read this.  What is the special mount option you
> change?   If you want to always exercise this as nocow, maybe add a new
> btrfs test that is a copy and uses the scratch device?  Or am I
> misunderstanding something?
> 

My point is, the current script prevent the test case to respect certain 
mount options, thus reduce the coverage.

E.g. in a multi-section fstests setup, default and nodatasum mount 
options are defined in different sections, and default mount option will 
be run first.

Then the next nodatasum section will still utilize the old inode created 
with regular default options, thus reduce the coverage.


Sure, a dedicated btrfs copy will help, but that will introduce duplication.
Not sure what is the proper way to handle such situation.


For now I'll follow Filipe's review to use _cleanup() to delete those 
involves test cases.

Thanks,
Qu

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] fstests: generic/362: remove the old file to reflect new mount options
  2026-05-27 21:42       ` Qu Wenruo
@ 2026-05-29  9:02         ` Zorro Lang
  0 siblings, 0 replies; 7+ messages in thread
From: Zorro Lang @ 2026-05-29  9:02 UTC (permalink / raw)
  To: Qu Wenruo; +Cc: Christoph Hellwig, fstests, linux-btrfs

On Thu, May 28, 2026 at 07:12:24AM +0930, Qu Wenruo wrote:
> 
> 
> 在 2026/5/27 22:33, Christoph Hellwig 写道:
> > On Wed, May 27, 2026 at 04:20:38PM +0930, Qu Wenruo wrote:
> > > > I'd rather add a copy of the test that runs on the scratch device
> > > > that can control the environment.  Or maybe just change the test
> > > > to use the scratch device?
> > > 
> > > I'm completely happy with using scratch device instead of test dev.
> > > 
> > > If no special reason to use test dev, the next update will go scratch dev
> > > instead.
> > 
> > I went back and re-read this.  What is the special mount option you
> > change?   If you want to always exercise this as nocow, maybe add a new
> > btrfs test that is a copy and uses the scratch device?  Or am I
> > misunderstanding something?
> > 
> 
> My point is, the current script prevent the test case to respect certain
> mount options, thus reduce the coverage.
> 
> E.g. in a multi-section fstests setup, default and nodatasum mount options
> are defined in different sections, and default mount option will be run
> first.
> 
> Then the next nodatasum section will still utilize the old inode created
> with regular default options, thus reduce the coverage.
> 
> 
> Sure, a dedicated btrfs copy will help, but that will introduce duplication.
> Not sure what is the proper way to handle such situation.

If there is a specific btrfs bug (commit) that can be 100% reproduced by
slightly modifying this case (e.g. use a specific mkfs or mount option),
I think it’s worth splitting it into a separate test case for better
test coverage and known issue tracking.

Thanks,
Zorro

> 
> 
> For now I'll follow Filipe's review to use _cleanup() to delete those
> involves test cases.
> 
> Thanks,
> Qu
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2026-05-29  9:02 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-26  7:00 [PATCH] fstests: generic/362: remove the old file to reflect new mount options Qu Wenruo
2026-05-27  6:34 ` Christoph Hellwig
2026-05-27  6:50   ` Qu Wenruo
2026-05-27 13:03     ` Christoph Hellwig
2026-05-27 21:42       ` Qu Wenruo
2026-05-29  9:02         ` Zorro Lang
2026-05-27 14:26 ` Filipe Manana

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.