Re: [RFC 2/2] generic: Add integrity tests for O_DSYNC and RWF_DSYNC writes

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, Aug 02, 2025 at 01:59:18AM +0530, Ritesh Harjani wrote:
> Zorro Lang <zlang@xxxxxxxxxx> writes:
> 
> > On Thu, Jul 31, 2025 at 06:05:55PM +0530, Ritesh Harjani (IBM) wrote:
> >> This test verifies the data & required metadata (e.g. inode i_size for extending
> >> writes) integrity when using O_DSYNC and RWF_DSYNC during writes operations,
> >> across buffered-io, aio-dio and dio, in the event of a sudden filesystem
> >> shutdown after write completion.
> >> 
> >> Man page of open says that -
> >> O_DSYNC provides synchronized I/O data integrity completion, meaning
> >> write operations will flush data to the underlying hardware, but will
> >> only flush metadata updates that are required to allow a subsequent read
> >> operation to complete successfully.
> >> 
> >> Signed-off-by: Ritesh Harjani (IBM) <ritesh.list@xxxxxxxxx>
> >> ---
> >>  tests/generic/737     | 30 +++++++++++++++++++++++++++++-
> >>  tests/generic/737.out | 21 +++++++++++++++++++++

BTW, as you change a testcase with known case number, your subject can be
"generic/737: ..." (instead of "generic: ...").

> >>  2 files changed, 50 insertions(+), 1 deletion(-)
> >> 
> >> diff --git a/tests/generic/737 b/tests/generic/737
> >> index 99ca1f39..0f27c82b 100755
> >> --- a/tests/generic/737
> >> +++ b/tests/generic/737
> >> @@ -4,7 +4,8 @@
> >>  #
> >>  # FS QA Test No. 737
> >>  #
> >> -# Integrity test for O_SYNC with buff-io, dio, aio-dio with sudden shutdown.
> >> +# Integrity test for O_[D]SYNC and/or RWF_DSYNC with buff-io, dio, aio-dio with
> >> +# sudden shutdown.
> >>  # Based on a testcase reported by Gao Xiang <hsiangkao@xxxxxxxxxxxxxxxxx>
> >>  #
> >> 
> >> @@ -21,6 +22,15 @@ _require_aiodio aio-dio-write-verify
> >>  _scratch_mkfs > $seqres.full 2>&1
> >>  _scratch_mount
> >> 
> >> +echo "T-0: Create a 1M file using buff-io & RWF_DSYNC"
> >> +$XFS_IO_PROG -f -c "pwrite -V 1 -D -S 0x5a 0 1M" $SCRATCH_MNT/testfile.t1 > /dev/null 2>&1
> >> +echo "T-0: Shutdown the fs suddenly"
> >> +_scratch_shutdown
> >> +echo "T-0: Cycle mount"
> >> +_scratch_cycle_mount
> >> +echo "T-0: File contents after cycle mount"
> >> +_hexdump $SCRATCH_MNT/testfile.t1
> >> +
> >>  echo "T-1: Create a 1M file using buff-io & O_SYNC"
> >>  $XFS_IO_PROG -fs -c "pwrite -S 0x5a 0 1M" $SCRATCH_MNT/testfile.t1 > /dev/null 2>&1
> >>  echo "T-1: Shutdown the fs suddenly"
> >> @@ -48,5 +58,23 @@ _scratch_cycle_mount
> >>  echo "T-3: File contents after cycle mount"
> >>  _hexdump $SCRATCH_MNT/testfile.t3
> >> 
> >> +echo "T-4: Create a 1M file using DIO & RWF_DSYNC"
> >> +$XFS_IO_PROG -fdc "pwrite -V 1 -S 0x5a -D 0 1M" $SCRATCH_MNT/testfile.t4 > /dev/null 2>&1
> >> +echo "T-4: Shutdown the fs suddenly"
> >> +_scratch_shutdown
> >> +echo "T-4: Cycle mount"
> >> +_scratch_cycle_mount
> >> +echo "T-4: File contents after cycle mount"
> >> +_hexdump $SCRATCH_MNT/testfile.t4
> >> +
> >> +echo "T-5: Create a 1M file using AIO-DIO & O_DSYNC"
> >> +$AIO_TEST -a size=1048576 -D -N $SCRATCH_MNT/testfile.t5 > /dev/null 2>&1
> >> +echo "T-5: Shutdown the fs suddenly"
> >> +_scratch_shutdown
> >> +echo "T-5: Cycle mount"
> >> +_scratch_cycle_mount
> >> +echo "T-5: File contents after cycle mount"
> >> +_hexdump $SCRATCH_MNT/testfile.t5
> >
> > I always hit "No such file or directory" [1], is this an expected test failure
> > which you hope to uncover?
> 
> Yes, we will need this fix [1] from Jan. Sorry I missed to add that in the commit
> message. Could you please give it a try with the fix maybe?

Sure, with this patch, this test passed on my side:
  FSTYP         -- xfs (debug)
  PLATFORM      -- Linux/x86_64 dell-per750-41 6.16.0-mainline+ #9 SMP PREEMPT_DYNAMIC Sat Aug  2 16:01:22 CST 2025
  MKFS_OPTIONS  -- -f /dev/mapper/testvg-scratch--devA
  MOUNT_OPTIONS -- -o context=system_u:object_r:root_t:s0 /dev/mapper/testvg-scratch--devA /mnt/scratch

  generic/737 4s ...  9s
  Ran: generic/737
  Passed all 1 tests

So this "No such file or directory" failure is a known bug, and this patch trys to
uncover it. You didn't metion that, so I thought you just try to write a
new integrity test (rather than a regression test) :-D If this change uncover a known
fix, please feel free to add _fixed_by_kernel_commit.

BTW, I saw you mark this patchset with "RFC", do you need to change it more?
Generally I won't merge RFC patches directly, although this patch looks good to
me. So when you think you've gotten enough review points, please feel free to
remove the "RFC" label and resend it :) Then ...

Reviewed-by: Zorro Lang <zlang@xxxxxxxxxx>

Thanks,
Zorro

> 
> [1]:
> https://lore.kernel.org/linux-fsdevel/20250730102840.20470-2-jack@xxxxxxx/
> 
> -ritesh
> 
> 
> >
> > [1]
> > # diff -u /root/git/xfstests/tests/generic/737.out /root/git/xfstests/results//generic/737.out.bad
> > --- /root/git/xfstests/tests/generic/737.out    2025-08-02 04:04:57.334489725 +0800
> > +++ /root/git/xfstests/results//generic/737.out.bad     2025-08-02 04:12:08.167934723 +0800
> > @@ -28,16 +28,14 @@
> >  *
> >  100000
> >  T-4: Create a 1M file using DIO & RWF_DSYNC
> >  T-4: Shutdown the fs suddenly
> >  T-4: Cycle mount
> >  T-4: File contents after cycle mount
> > -000000 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a  >ZZZZZZZZZZZZZZZZ<
> > -*
> > -100000
> > +od: /mnt/scratch/testfile.t4: No such file or directory
> >  T-5: Create a 1M file using AIO-DIO & O_DSYNC
> >  T-5: Shutdown the fs suddenly
> >  T-5: Cycle mount
> >  T-5: File contents after cycle mount
> > -000000 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a  >ZZZZZZZZZZZZZZZZ<
> > -*
> > -100000
> > +od: /mnt/scratch/testfile.t5: No such file or directory
> >
> >> +
> >>  status=0
> >>  exit
> >> diff --git a/tests/generic/737.out b/tests/generic/737.out
> >> index efe6ff1f..2bafeefa 100644
> >> --- a/tests/generic/737.out
> >> +++ b/tests/generic/737.out
> >> @@ -1,4 +1,11 @@
> >>  QA output created by 737
> >> +T-0: Create a 1M file using buff-io & RWF_DSYNC
> >> +T-0: Shutdown the fs suddenly
> >> +T-0: Cycle mount
> >> +T-0: File contents after cycle mount
> >> +000000 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a  >ZZZZZZZZZZZZZZZZ<
> >> +*
> >> +100000
> >>  T-1: Create a 1M file using buff-io & O_SYNC
> >>  T-1: Shutdown the fs suddenly
> >>  T-1: Cycle mount
> >> @@ -20,3 +27,17 @@ T-3: File contents after cycle mount
> >>  000000 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a  >ZZZZZZZZZZZZZZZZ<
> >>  *
> >>  100000
> >> +T-4: Create a 1M file using DIO & RWF_DSYNC
> >> +T-4: Shutdown the fs suddenly
> >> +T-4: Cycle mount
> >> +T-4: File contents after cycle mount
> >> +000000 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a  >ZZZZZZZZZZZZZZZZ<
> >> +*
> >> +100000
> >> +T-5: Create a 1M file using AIO-DIO & O_DSYNC
> >> +T-5: Shutdown the fs suddenly
> >> +T-5: Cycle mount
> >> +T-5: File contents after cycle mount
> >> +000000 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a  >ZZZZZZZZZZZZZZZZ<
> >> +*
> >> +100000
> >> --
> >> 2.49.0
> >> 
> >> 
> 





[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [NTFS 3]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [NTFS 3]     [Samba]     [Device Mapper]     [CEPH Development]

  Powered by Linux