[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]

 



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 +++++++++++++++++++++
 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
+
 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