2 # SPDX-License-Identifier: GPL-2.0
3 # Copyright (C) 2018 SUSE Linux Products GmbH. All Rights Reserved.
7 # Test that if we have a file with 2 (or more) hard links in the same parent
8 # directory, rename of the hard links, rename one of the other hard links to
9 # the old name of the hard link we renamed before, create a new file in the
10 # same parent directory with the old name of second hard link we renamed, fsync
11 # fsync this new file and power fail, we will be able to mount again the
12 # filesystem and the new file and all hard links exist.
15 seqres=$RESULT_DIR/$seq
16 echo "QA output created by $seq"
18 status=1 # failure is the default!
19 trap "_cleanup; exit \$status" 0 1 2 3 15
28 # get standard environment, filters and checks
33 # real QA test starts here
38 _require_dm_target flakey
42 _scratch_mkfs >>$seqres.full 2>&1
43 _require_metadata_journaling $SCRATCH_DEV
47 # Create our test file with 2 hard links in the same parent directory.
48 mkdir $SCRATCH_MNT/testdir
49 touch $SCRATCH_MNT/testdir/foo
50 ln $SCRATCH_MNT/testdir/foo $SCRATCH_MNT/testdir/bar
52 # Make sure everything done so far is durably persisted.
55 # Now rename the first hard link (foo) to a new name and rename the second hard
56 # link (bar) to the old name of the first hard link (foo).
57 mv $SCRATCH_MNT/testdir/foo $SCRATCH_MNT/testdir/qwerty
58 mv $SCRATCH_MNT/testdir/bar $SCRATCH_MNT/testdir/foo
60 # Create a new file, in the same parent directory, with the old name of the
61 # second hard link (bar) and fsync this new file.
62 touch $SCRATCH_MNT/testdir/bar
63 $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/testdir/bar
65 echo "Contents of test directory before the power failure:"
66 ls -R $SCRATCH_MNT/testdir | _filter_scratch
68 # Simulate a power failure and mount the filesystem to check that we are able to
69 # mount it and we have the same files, with the same hard links, that we had
70 # before the power failure and in the same order.
71 _flakey_drop_and_remount
73 echo "Contents of test directory after the power failure:"
74 ls -R $SCRATCH_MNT/testdir | _filter_scratch