2 # SPDX-License-Identifier: GPL-2.0
3 # Copyright (C) 2018 SUSE Linux Products GmbH. All Rights Reserved.
7 # Test that after a combination of file renames, linking and creating a new file
8 # with the old name of a renamed file, if we fsync the new file, after a power
9 # failure we are able to mount the filesystem and all file names correspond to
13 _begin_fstest auto quick log
15 # Override the default cleanup function.
23 # Import common functions.
27 # real QA test starts here
31 _require_dm_target flakey
33 _scratch_mkfs >>$seqres.full 2>&1
34 _require_metadata_journaling $SCRATCH_DEV
38 mkdir $SCRATCH_MNT/testdir
39 echo -n "foo" > $SCRATCH_MNT/testdir/fname1
40 echo -n "hello" > $SCRATCH_MNT/testdir/fname2
42 # Make sure everything done so far is durably persisted.
45 # Rename and link files such that one new name corresponds to the name of
46 # another renamed file and one new file has the old name of one of the renamed
47 # files. Then fsync only the new file.
48 mv $SCRATCH_MNT/testdir/fname1 $SCRATCH_MNT/testdir/fname3
49 mv $SCRATCH_MNT/testdir/fname2 $SCRATCH_MNT/testdir/fname4
50 ln $SCRATCH_MNT/testdir/fname3 $SCRATCH_MNT/testdir/fname2
51 echo -n "bar" > $SCRATCH_MNT/testdir/fname1
52 $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/testdir/fname1
54 # Simulate a power failure and mount the filesystem to check that all file names
55 # exist and correspond to the correct inodes.
56 _flakey_drop_and_remount
58 echo "File fname1 data after power failure: $(cat $SCRATCH_MNT/testdir/fname1)"
59 echo "File fname2 data after power failure: $(cat $SCRATCH_MNT/testdir/fname2)"
60 echo "File fname3 data after power failure: $(cat $SCRATCH_MNT/testdir/fname3)"
61 echo "File fname4 data after power failure: $(cat $SCRATCH_MNT/testdir/fname4)"