@@ -45,6 +45,12 @@ mkdir $SCRATCH_MNT/testdir
echo -n "foo" > $SCRATCH_MNT/testdir/fname1
echo -n "hello" > $SCRATCH_MNT/testdir/fname2
+# For a different variant of the same test but when files have hardlinks too.
+mkdir $SCRATCH_MNT/testdir2
+echo -n "foo" > $SCRATCH_MNT/testdir2/zz
+ln $SCRATCH_MNT/testdir2/zz $SCRATCH_MNT/testdir2/zz_link
+echo -n "hello" > $SCRATCH_MNT/testdir2/a
+
# Make sure everything done so far is durably persisted.
sync
@@ -57,6 +63,21 @@ ln $SCRATCH_MNT/testdir/fname3 $SCRATCH_MNT/testdir/fname2
echo -n "bar" > $SCRATCH_MNT/testdir/fname1
$XFS_IO_PROG -c "fsync" $SCRATCH_MNT/testdir/fname1
+# A second variant, more complex, that involves files with hardlinks too.
+
+# The following 3 renames are equivalent to a rename exchange (zz_link to a), but
+# without the atomicity which isn't required here.
+mv $SCRATCH_MNT/testdir2/a $SCRATCH_MNT/testdir2/tmp
+mv $SCRATCH_MNT/testdir2/zz_link $SCRATCH_MNT/testdir2/a
+mv $SCRATCH_MNT/testdir2/tmp $SCRATCH_MNT/testdir2/zz_link
+
+# The following rename and file creation are equivalent to a rename whiteout.
+mv $SCRATCH_MNT/testdir2/zz $SCRATCH_MNT/testdir2/a2
+echo -n "bar" > $SCRATCH_MNT/testdir2/zz
+
+# Fsync of zz should work and produce correct results after a power failure.
+$XFS_IO_PROG -c "fsync" $SCRATCH_MNT/testdir2/zz
+
# Simulate a power failure and mount the filesystem to check that all file names
# exist and correspond to the correct inodes.
_flakey_drop_and_remount
@@ -65,6 +86,11 @@ echo "File fname1 data after power failure: $(cat $SCRATCH_MNT/testdir/fname1)"
echo "File fname2 data after power failure: $(cat $SCRATCH_MNT/testdir/fname2)"
echo "File fname3 data after power failure: $(cat $SCRATCH_MNT/testdir/fname3)"
+echo "File a data after power failure: $(cat $SCRATCH_MNT/testdir2/a)"
+echo "File a2 data after power failure: $(cat $SCRATCH_MNT/testdir2/a2)"
+echo "File zz data after power failure: $(cat $SCRATCH_MNT/testdir2/zz)"
+echo "File zz_link data after power failure: $(cat $SCRATCH_MNT/testdir2/zz_link)"
+
_unmount_flakey
status=0
@@ -2,3 +2,7 @@ QA output created by 527
File fname1 data after power failure: bar
File fname2 data after power failure: foo
File fname3 data after power failure: foo
+File a data after power failure: foo
+File a2 data after power failure: foo
+File zz data after power failure: bar
+File zz_link data after power failure: hello