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
32 _require_dm_target flakey
36 _scratch_mkfs >>$seqres.full 2>&1
37 _require_metadata_journaling $SCRATCH_DEV
41 # Create our test directory with one file in it and fsync the file.
42 mkdir $SCRATCH_MNT/dir
43 touch $SCRATCH_MNT/dir/foo
44 $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/dir/foo
46 # Keep an open file descriptor on our directory while we evict inodes. We just
47 # want to evict the file's inode, the directory's inode must not be evicted.
55 # Wait a bit to give time to background process to chdir to our test directory.
58 # Trigger eviction of the file's inode.
59 echo 2 > /proc/sys/vm/drop_caches
61 # Unlink our file and fsync the parent directory. After a power failure we don't
62 # expect to see the file anymore, since we fsync'ed the parent directory.
63 unlink $SCRATCH_MNT/dir/foo
64 $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/dir
66 # Kill the background process using our test directory.
70 # Simulate a power failure and then check file foo does not exists anymore.
71 _flakey_drop_and_remount
73 [ -f $SCRATCH_MNT/dir/foo ] && echo "File foo still exists"
76 echo "Silence is golden"