diff --git a/tests/generic/510 b/tests/generic/510 new file mode 100755 index 00000000..551cbe33 --- /dev/null +++ b/tests/generic/510 @@ -0,0 +1,71 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2018 SUSE Linux Products GmbH. All Rights Reserved. +# +# FS QA Test No. 510 +# +# Test that if we move a file from a directory B to a directory A, replace +# directory B with directory A, fsync the file and then power fail, after +# mounting the filesystem the file has a single parent, named B and there +# is no longer any directory with the name A. +# +seq=`basename $0` +seqres=$RESULT_DIR/$seq +echo "QA output created by $seq" +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + _cleanup_flakey + cd / + rm -f $tmp.* +} + +# get standard environment, filters and checks +. ./common/rc +. ./common/filter +. ./common/dmflakey + +# real QA test starts here +_supported_fs generic +_supported_os Linux +_require_scratch +_require_dm_target flakey + +rm -f $seqres.full + +_scratch_mkfs >>$seqres.full 2>&1 +_require_metadata_journaling $SCRATCH_DEV +_init_flakey +_mount_flakey + +# Create our test directories and file. +mkdir $SCRATCH_MNT/testdir +mkdir $SCRATCH_MNT/testdir/A +mkdir $SCRATCH_MNT/testdir/B +touch $SCRATCH_MNT/testdir/B/bar + +# Make sure everything done so far is durably persisted. +sync + +# Now move our file bar from directory B to directory A and then replace +# directory B with directory A, also renaming directory A to B. Finally +# fsync file bar. +mv $SCRATCH_MNT/testdir/B/bar $SCRATCH_MNT/testdir/A/bar +mv -T $SCRATCH_MNT/testdir/A $SCRATCH_MNT/testdir/B +$XFS_IO_PROG -c "fsync" $SCRATCH_MNT/testdir/B/bar + +# Simulate a power failure and mount the filesystem. We expect file bar +# to exist and have a single parent directory, named B, and that no +# directory named A exists. +_flakey_drop_and_remount + +echo "Filesystem content after power failure:" +ls -R $SCRATCH_MNT/testdir | _filter_scratch + +_unmount_flakey + +status=0 +exit diff --git a/tests/generic/510.out b/tests/generic/510.out new file mode 100644 index 00000000..176ec9ba --- /dev/null +++ b/tests/generic/510.out @@ -0,0 +1,7 @@ +QA output created by 510 +Filesystem content after power failure: +SCRATCH_MNT/testdir: +B + +SCRATCH_MNT/testdir/B: +bar diff --git a/tests/generic/group b/tests/generic/group index 9bb3130f..635503d3 100644 --- a/tests/generic/group +++ b/tests/generic/group @@ -512,3 +512,4 @@ 507 shutdown auto quick metadata 508 shutdown auto quick metadata 509 auto quick log +510 auto quick log