mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
84fdfc5d8a
In generic/252, aiocp with DIRECT will fail and return EINVAL on 4096 sector size block device, because the default 512 alignment defined in aiocp is not aligned with 4096. Please see the following error: ---------------------------------------------------------- read missing bytes expect 8388608 got -22 ---------------------------------------------------------- We use '-a' option to specify a proper alignment size in all tests that call aiocp with DIRECT. Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com> Reviewed-by: Eryu Guan <guaneryu@gmail.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
93 lines
2.1 KiB
Bash
Executable File
93 lines
2.1 KiB
Bash
Executable File
#! /bin/bash
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
# Copyright (c) 2016, Oracle and/or its affiliates. All Rights Reserved.
|
|
#
|
|
# FS QA Test No. 237
|
|
#
|
|
# Test AIO DIO CoW behavior when the write temporarily fails.
|
|
#
|
|
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.* $TEST_DIR/moo
|
|
_dmerror_cleanup
|
|
}
|
|
|
|
# get standard environment, filters and checks
|
|
. ./common/rc
|
|
. ./common/filter
|
|
. ./common/reflink
|
|
. ./common/dmerror
|
|
|
|
# real QA test starts here
|
|
_supported_os Linux
|
|
_supported_fs xfs
|
|
_require_scratch_reflink
|
|
_require_cp_reflink
|
|
_require_dm_target error
|
|
_require_xfs_io_command "cowextsize"
|
|
_require_aiodio "aiocp"
|
|
|
|
rm -f $seqres.full
|
|
|
|
|
|
echo "Format and mount"
|
|
_scratch_mkfs > $seqres.full 2>&1
|
|
_dmerror_init
|
|
_dmerror_mount >> $seqres.full 2>&1
|
|
|
|
testdir=$SCRATCH_MNT/test-$seq
|
|
mkdir $testdir
|
|
|
|
blksz=65536
|
|
nr=640
|
|
bufnr=128
|
|
filesize=$((blksz * nr))
|
|
bufsize=$((blksz * bufnr))
|
|
alignment=`_min_dio_alignment $TEST_DEV`
|
|
|
|
_require_fs_space $SCRATCH_MNT $((filesize / 1024 * 3 * 5 / 4))
|
|
|
|
echo "Create the original files"
|
|
$XFS_IO_PROG -c "cowextsize $((bufsize * 2))" $testdir
|
|
$XFS_IO_PROG -f -c "pwrite -S 0x61 -b $bufsize 0 $filesize" $testdir/file1 >> $seqres.full
|
|
_cp_reflink $testdir/file1 $testdir/file2 >> $seqres.full
|
|
_dmerror_unmount
|
|
_dmerror_mount
|
|
|
|
echo "Compare files"
|
|
md5sum $testdir/file1 | _filter_scratch
|
|
md5sum $testdir/file2 | _filter_scratch
|
|
|
|
echo "CoW and unmount"
|
|
$XFS_IO_PROG -f -c "pwrite -S 0x63 $bufsize 1" $testdir/file2 >> $seqres.full
|
|
$XFS_IO_PROG -f -c "pwrite -S 0x63 -b $bufsize 0 $filesize" $TEST_DIR/moo >> $seqres.full
|
|
sync
|
|
_dmerror_load_error_table
|
|
$AIO_TEST -a $alignment -f DIRECT -b $bufsize $TEST_DIR/moo $testdir/file2 >> $seqres.full
|
|
_dmerror_load_working_table
|
|
_dmerror_unmount
|
|
_dmerror_mount
|
|
|
|
echo "Compare files"
|
|
md5sum $testdir/file1 | _filter_scratch
|
|
md5sum $testdir/file2 | _filter_scratch
|
|
|
|
echo "Check for damage"
|
|
_dmerror_unmount
|
|
_dmerror_cleanup
|
|
_repair_scratch_fs >> $seqres.full
|
|
|
|
# success, all done
|
|
status=0
|
|
exit
|