Files
apfstests/tests/generic/250
T
Eryu Guan 86e7366e84 generic/250: ignore xfs_io IO errors when writing to dmerror device
When testing with data=journal ext4, direct write to dmerror device
doesn't return EIO, because ext4 turns direct write to buffered
write in data=journal mode and all data is written to journal
buffer. The write only fails later when commiting journal and error
messages can be seen in dmesg.

As the test is checking on the md5 checksum of the test file, it's
ok to ignore the IO error returned by xfs_io, as long as the
checksums match the golden image.

Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2016-06-15 15:32:30 +08:00

103 lines
2.6 KiB
Bash
Executable File

#! /bin/bash
# FS QA Test No. 250
#
# Create an unwritten extent, set up dm-error, try a DIO write, then
# make sure we can't read back old disk contents.
#
#-----------------------------------------------------------------------
# Copyright (c) 2016, Oracle and/or its affiliates. All Rights Reserved.
#
# 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
_require_dm_target error
_require_xfs_io_command "falloc"
_require_odirect
rm -f $seqres.full
echo "Format and mount"
$XFS_IO_PROG -d -c "pwrite -S 0x69 -b 1048576 0 $((64 * 1048576))" $SCRATCH_DEV >> $seqres.full
_scratch_mkfs_sized $((64 * 1048576)) > $seqres.full 2>&1
_dmerror_init
_dmerror_mount >> $seqres.full 2>&1
_dmerror_unmount
_dmerror_mount
testdir=$SCRATCH_MNT/test-$seq
mkdir $testdir
blksz=65536
nr=640
bufnr=128
filesize=$((blksz * nr))
bufsize=$((blksz * bufnr))
_require_fs_space $SCRATCH_MNT $((filesize / 1024 * 5 / 4))
echo "Create the original files"
$XFS_IO_PROG -f -c "falloc 0 $filesize" $testdir/file2 >> $seqres.full
_dmerror_unmount
_dmerror_mount
echo "Compare files"
md5sum $testdir/file2 | _filter_scratch
echo "Write and unmount"
$XFS_IO_PROG -f -c "pwrite -S 0x63 $bufsize 1" $testdir/file2 >> $seqres.full
sync
_dmerror_load_error_table
$XFS_IO_PROG -d -f -c "pwrite -S 0x63 -b $bufsize 0 $filesize" $testdir/file2 \
>> $seqres.full 2>&1
_dmerror_load_working_table
_dmerror_unmount
_dmerror_mount
echo "Compare files"
md5sum $testdir/file2 | _filter_scratch
echo "Check for damage"
_dmerror_unmount
_dmerror_cleanup
_repair_scratch_fs >> $seqres.full
# success, all done
status=0
exit