On Mon, Nov 20, 2023 at 04:49:34PM +0530, Ritesh Harjani (IBM) wrote: > This test covers data & metadata integrity check with directio with > o_sync flag and checks the file contents & size after sudden fileystem > shutdown once the directio write is completed. ext4 directio after iomap > conversion was broken in the sense that if the FS crashes after > synchronous directio write, it's file size is not properly updated. > This test adds a testcase to cover such scenario. > > Man page of open says that - > O_SYNC provides synchronized I/O file integrity completion, meaning write > operations will flush data and all associated metadata to the underlying > hardware > > Reported-by: Gao Xiang <hsiangkao@xxxxxxxxxxxxxxxxx> > Signed-off-by: Ritesh Harjani (IBM) <ritesh.list@xxxxxxxxx> > --- > tests/generic/733 | 54 +++++++++++++++++++++++++++++++++++++++++++ > tests/generic/733.out | 22 ++++++++++++++++++ > 2 files changed, 76 insertions(+) > create mode 100755 tests/generic/733 > create mode 100644 tests/generic/733.out > > diff --git a/tests/generic/733 b/tests/generic/733 > new file mode 100755 > index 00000000..18021e8a > --- /dev/null > +++ b/tests/generic/733 > @@ -0,0 +1,54 @@ > +#! /bin/bash > +# SPDX-License-Identifier: GPL-2.0 > +# Copyright (c) 2023 IBM Corporation. All Rights Reserved. > +# > +# FS QA Test 471 > +# > +# Integrity test for O_SYNC with buff-io, dio, aio-dio with sudden shutdown. > +# Based on a testcase reported by Gao Xiang <hsiangkao@xxxxxxxxxxxxxxxxx> > +# > + > +. ./common/preamble > +_begin_fstest auto quick shutdown aio > + > +# real QA test starts here > +_supported_fs generic > +_require_scratch > +_require_scratch_shutdown > +_require_aiodio aio-dio-write-verify > + > +_fixed_by_kernel_commit 91562895f803 \ > + "ext4: properly sync file size update after O_SYNC direct IO" As this a generic test case, so: [[ "$FSTYP" =~ ext* ]] && ... Anyway, I'll change that when I merge it. Other looks good to me Reviewed-by: Zorro Lang <zlang@xxxxxxxxxx> > + > +_scratch_mkfs > $seqres.full 2>&1 > +_scratch_mount > + > +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" > +_scratch_shutdown > +echo "T-1: Cycle mount" > +_scratch_cycle_mount > +echo "T-1: File contents after cycle mount" > +_hexdump $SCRATCH_MNT/testfile.t1 > + > +echo "T-2: Create a 1M file using O_DIRECT & O_SYNC" > +$XFS_IO_PROG -fsd -c "pwrite -S 0x5a 0 1M" $SCRATCH_MNT/testfile.t2 > /dev/null 2>&1 > +echo "T-2: Shutdown the fs suddenly" > +_scratch_shutdown > +echo "T-2: Cycle mount" > +_scratch_cycle_mount > +echo "T-2: File contents after cycle mount" > +_hexdump $SCRATCH_MNT/testfile.t2 > + > +echo "T-3: Create a 1M file using AIO-DIO & O_SYNC" > +$AIO_TEST -a size=1048576 -S -N $SCRATCH_MNT/testfile.t3 > /dev/null 2>&1 > +echo "T-3: Shutdown the fs suddenly" > +_scratch_shutdown > +echo "T-3: Cycle mount" > +_scratch_cycle_mount > +echo "T-3: File contents after cycle mount" > +_hexdump $SCRATCH_MNT/testfile.t3 > + > +status=0 > +exit > diff --git a/tests/generic/733.out b/tests/generic/733.out > new file mode 100644 > index 00000000..e0536a4e > --- /dev/null > +++ b/tests/generic/733.out > @@ -0,0 +1,22 @@ > +QA output created by 733 > +T-1: Create a 1M file using buff-io & O_SYNC > +T-1: Shutdown the fs suddenly > +T-1: Cycle mount > +T-1: 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-2: Create a 1M file using O_DIRECT & O_SYNC > +T-2: Shutdown the fs suddenly > +T-2: Cycle mount > +T-2: 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-3: Create a 1M file using AIO-DIO & O_SYNC > +T-3: Shutdown the fs suddenly > +T-3: Cycle mount > +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 > -- > 2.41.0 > >