Files
apfstests/tests/generic/252
T
Xiao Yang 84fdfc5d8a fstests: Fix buffer alignment of aiocp
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>
2018-08-19 20:13:11 +08:00

95 lines
2.2 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. 252
#
# Create an unwritten extent, set up dm-error, try an AIO DIO write, then
# make sure we can't read back old disk contents.
#
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 $TEST_DIR/moo
_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"
# 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
_require_aiodio "aiocp"
AIO_TEST="src/aio-dio-regress/aiocp"
rm -f $seqres.full
fssize=$((100 * 1048576))
echo "Format and mount"
$XFS_IO_PROG -d -c "pwrite -S 0x69 -b 1048576 0 $fssize" $SCRATCH_DEV >> $seqres.full
_scratch_mkfs_sized $fssize > $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))
alignment=`_min_dio_alignment $TEST_DEV`
_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 "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/file2 | _filter_scratch
echo "Check for damage"
_dmerror_unmount
_dmerror_cleanup
_repair_scratch_fs >> $seqres.full
# success, all done
status=0
exit