#! /bin/bash # SPDX-License-Identifier: GPL-2.0 # Copyright (c) 2017, Jeff Layton # # FS QA Test No. 441 # # Open a file several times, write to it, fsync on all fds and make sure that # they all return 0. Change the device to start throwing errors. Write again # on all fds and fsync on all fds. Ensure that we get errors on all of them. # Then fsync on all one last time and verify that all return 0. # seq=`basename $0` seqres=$RESULT_DIR/$seq echo "QA output created by $seq" here=`pwd` tmp=/tmp/$$ status=1 # failure is the default! trap "_cleanup; exit \$status" 0 1 2 3 15 _cleanup() { cd / rm -rf $tmp.* $testdir _dmerror_cleanup } # get standard environment, filters and checks . ./common/rc . ./common/filter . ./common/dmerror # real QA test starts here _require_scratch # This test uses "dm" without taking into account the data could be on # realtime subvolume, thus the test will fail with rtinherit=1 _require_no_rtinherit # Generally, we want to avoid journal errors on the extended testcase. Only # unset the -s flag if we have a logdev sflag='-s' case $FSTYP in btrfs) _notrun "btrfs has a specialized test for this" ;; ext3|ext4|xfs) # Do the more thorough test if we have a logdev _has_logdev && sflag='' ;; *) ;; esac _require_dm_target error _require_test_program fsync-err _require_test_program dmerror rm -f $seqres.full echo "Format and mount" _scratch_mkfs > $seqres.full 2>&1 _dmerror_init _dmerror_mount _require_fs_space $SCRATCH_MNT 65536 testfile=$SCRATCH_MNT/fsync-err-test echo "$here/src/fsync-err $sflag -d $here/src/dmerror $testfile" >> $seqres.full $here/src/fsync-err $sflag -d $here/src/dmerror $testfile # success, all done _dmerror_load_working_table _dmerror_unmount _dmerror_cleanup # fs may be corrupt after this -- attempt to repair it _repair_scratch_fs >> $seqres.full status=0 exit