mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
3d2b240421
Currently we just have this test run on a whitelist of filesystems, but it would be best to be able to run it on all of them. The problem is that a lot of filesystems basically shut down once they hit metadata errors. Allow the fsync-err testcase to operate in two different modes. One mode just does basic testing to ensure that we get an error back on all fd's when we fsync. The other does a more thorough test to ensure that we get back 0 on subsequent fsyncs when there hasn't been any write activity. For now, we just opt-in to the more thorough testing on certain filesystems: xfs, ext3 and ext4 on the generic test. All other filesystems will run in simple mode. Signed-off-by: Jeff Layton <jlayton@redhat.com> Reviewed-by: Eryu Guan <eguan@redhat.com> Signed-off-by: Eryu Guan <eguan@redhat.com>
94 lines
2.4 KiB
Bash
Executable File
94 lines
2.4 KiB
Bash
Executable File
#! /bin/bash
|
|
# 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.
|
|
#
|
|
#-----------------------------------------------------------------------
|
|
# Copyright (c) 2017, Jeff Layton <jlayton@redhat.com>
|
|
#
|
|
# This program is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU General Public License as
|
|
# published by the Free Software Foundation.
|
|
#
|
|
# This program is distributed in the hope that it would be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write the Free Software Foundation,
|
|
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
#-----------------------------------------------------------------------
|
|
|
|
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
|
|
_supported_os Linux
|
|
_require_scratch
|
|
|
|
# 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
|