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>
95 lines
2.2 KiB
Bash
Executable File
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
|