mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
86e7366e84
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>
103 lines
2.6 KiB
Bash
Executable File
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
|