diff --git a/tests/generic/547 b/tests/generic/547 new file mode 100755 index 00000000..bcce8fe8 --- /dev/null +++ b/tests/generic/547 @@ -0,0 +1,73 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2019 SUSE Linux Products GmbH. All Rights Reserved. +# +# FS QA Test No. 547 +# +# Run fsstress, fsync every file and directory, simulate a power failure and +# then verify that all files and directories exist, with the same data and +# metadata they had before the power failure. +# +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_test +_require_scratch +_require_fssum +_require_dm_target flakey + +rm -f $seqres.full + +fssum_files_dir=$TEST_DIR/generic-test-$seq +rm -fr $fssum_files_dir +mkdir $fssum_files_dir + +_scratch_mkfs >>$seqres.full 2>&1 +_require_metadata_journaling $SCRATCH_DEV +_init_flakey +_mount_flakey + +mkdir $SCRATCH_MNT/test +args=`_scale_fsstress_args -p 4 -n 100 $FSSTRESS_AVOID -d $SCRATCH_MNT/test` +args="$args -f mknod=0 -f symlink=0" +echo "Running fsstress with arguments: $args" >>$seqres.full +$FSSTRESS_PROG $args >>$seqres.full + +# Fsync every file and directory. +find $SCRATCH_MNT/test \( -type f -o -type d \) -exec $XFS_IO_PROG -c fsync {} \; + +# Compute a digest of the filesystem (using the test directory only, to skip +# fs specific directories such as "lost+found" on ext4 for example). +$FSSUM_PROG -A -f -w $fssum_files_dir/fs_digest $SCRATCH_MNT/test + +# Simulate a power failure and mount the filesystem to check that all files and +# directories exist and have all data and metadata preserved. +_flakey_drop_and_remount + +# Compute a new digest and compare it to the one we created previously, they +# must match. +$FSSUM_PROG -r $fssum_files_dir/fs_digest $SCRATCH_MNT/test + +_unmount_flakey + +status=0 +exit diff --git a/tests/generic/547.out b/tests/generic/547.out new file mode 100644 index 00000000..0f6f1131 --- /dev/null +++ b/tests/generic/547.out @@ -0,0 +1,2 @@ +QA output created by 547 +OK diff --git a/tests/generic/group b/tests/generic/group index 47e81d96..49639fc9 100644 --- a/tests/generic/group +++ b/tests/generic/group @@ -549,3 +549,4 @@ 544 auto quick clone 545 auto quick cap 546 auto quick clone enospc log +547 auto quick log