2 # SPDX-License-Identifier: GPL-2.0
3 # Copyright (C) 2019 SUSE Linux Products GmbH. All Rights Reserved.
7 # Test that if we fsync a file, evict its inode, unlink it and then fsync its
8 # parent directory, after a power failure the file does not exists.
11 seqres=$RESULT_DIR/$seq
12 echo "QA output created by $seq"
14 status=1 # failure is the default!
15 trap "_cleanup; exit \$status" 0 1 2 3 15
24 # get standard environment, filters and checks
29 # real QA test starts here
33 _require_dm_target flakey
37 _scratch_mkfs >>$seqres.full 2>&1
38 _require_metadata_journaling $SCRATCH_DEV
42 # Create our test directory with one file in it and fsync the file.
43 mkdir $SCRATCH_MNT/dir
44 touch $SCRATCH_MNT/dir/foo
45 $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/dir/foo
47 # Keep an open file descriptor on our directory while we evict inodes. We just
48 # want to evict the file's inode, the directory's inode must not be evicted.
56 # Wait a bit to give time to background process to chdir to our test directory.
59 # Trigger eviction of the file's inode.
60 echo 2 > /proc/sys/vm/drop_caches
62 # Unlink our file and fsync the parent directory. After a power failure we don't
63 # expect to see the file anymore, since we fsync'ed the parent directory.
64 unlink $SCRATCH_MNT/dir/foo
65 $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/dir
67 # Kill the background process using our test directory.
71 # Simulate a power failure and then check file foo does not exists anymore.
72 _flakey_drop_and_remount
74 [ -f $SCRATCH_MNT/dir/foo ] && echo "File foo still exists"
77 echo "Silence is golden"