mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
d34e87ea0f
For some filesystem, such as vfat, the max support file size is 4G. We limit the max size and let the test go on running. Fix it by moving the function get_max_file_size() of generci/485 to common/rc, and add the max filesize limit to generic/299. Signed-off-by: Yufen Yu <yuyufen@huawei.com> Reviewed-by: Eryu Guan <guaneryu@gmail.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
152 lines
2.9 KiB
Bash
Executable File
152 lines
2.9 KiB
Bash
Executable File
#! /bin/bash
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
|
|
#
|
|
# FSQA Test No. 299
|
|
#
|
|
# AIO/DIO stress test
|
|
# Run random AIO/DIO activity and fallocate/truncate simultaneously
|
|
# Test will operate on huge sparsed files so ENOSPC is expected.
|
|
#
|
|
seq=`basename $0`
|
|
seqres=$RESULT_DIR/$seq
|
|
echo "QA output created by $seq"
|
|
|
|
here=`pwd`
|
|
tmp=/tmp/$$
|
|
fio_config=$tmp.fio
|
|
status=1 # failure is the default!
|
|
trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15
|
|
|
|
# get standard environment, filters and checks
|
|
. ./common/rc
|
|
. ./common/filter
|
|
|
|
# real QA test starts here
|
|
_supported_fs generic
|
|
_supported_os Linux
|
|
_require_test
|
|
_require_scratch
|
|
_require_odirect
|
|
_require_block_device $SCRATCH_DEV
|
|
|
|
NUM_JOBS=$((4*LOAD_FACTOR))
|
|
BLK_DEV_SIZE=`blockdev --getsz $SCRATCH_DEV`
|
|
FILE_SIZE=$((BLK_DEV_SIZE * 512))
|
|
|
|
max_file_size=$(_get_max_file_size)
|
|
if [ $max_file_size -lt $FILE_SIZE ]; then
|
|
FILE_SIZE=$max_file_size
|
|
fi
|
|
|
|
cat >$fio_config <<EOF
|
|
###########
|
|
# $seq test fio activity
|
|
# Filenames derived from jobsname and jobid like follows:
|
|
# ${JOB_NAME}.${JOB_ID}.${ITERATION_ID}
|
|
[global]
|
|
ioengine=libaio
|
|
bs=128k
|
|
directory=${SCRATCH_MNT}
|
|
filesize=${FILE_SIZE}
|
|
size=999G
|
|
iodepth=128*${LOAD_FACTOR}
|
|
continue_on_error=write
|
|
ignore_error=,ENOSPC
|
|
error_dump=0
|
|
create_on_open=1
|
|
fallocate=none
|
|
exitall=1
|
|
|
|
## Perform direct aio, to files which may be truncated
|
|
## by external task
|
|
[direct_aio]
|
|
direct=1
|
|
buffered=0
|
|
numjobs=${NUM_JOBS}
|
|
rw=randwrite
|
|
runtime=100*${TIME_FACTOR}
|
|
time_based
|
|
|
|
# Perform direct aio and verify data
|
|
# This test case should check use-after-free issues
|
|
[aio-dio-verifier]
|
|
numjobs=1
|
|
verify=crc32c-intel
|
|
verify_fatal=1
|
|
verify_dump=1
|
|
verify_backlog=1024
|
|
verify_async=4
|
|
verifysort=1
|
|
direct=1
|
|
bs=4k
|
|
rw=randrw
|
|
filename=aio-dio-verifier
|
|
|
|
# Perform buffered aio and verify data
|
|
# This test case should check use-after-free issues
|
|
[buffered-aio-verifier]
|
|
numjobs=1
|
|
verify=crc32c-intel
|
|
verify_fatal=1
|
|
verify_dump=1
|
|
verify_backlog=1024
|
|
verify_async=4
|
|
verifysort=1
|
|
direct=0
|
|
buffered=1
|
|
bs=4k
|
|
rw=randrw
|
|
filename=buffered-aio-verifier
|
|
EOF
|
|
|
|
rm -f $seqres.full
|
|
|
|
_require_fio $fio_config
|
|
_require_xfs_io_command "falloc"
|
|
|
|
_workout()
|
|
{
|
|
echo ""
|
|
echo "Run fio with random aio-dio pattern"
|
|
echo ""
|
|
cat $fio_config >> $seqres.full
|
|
run_check $FIO_PROG $fio_config &
|
|
pid=$!
|
|
echo "Start fallocate/truncate loop"
|
|
|
|
for ((i=0; ; i++))
|
|
do
|
|
for ((k=1; k <= NUM_JOBS; k++))
|
|
do
|
|
$XFS_IO_PROG -f -c "falloc 0 $FILE_SIZE" \
|
|
$SCRATCH_MNT/direct_aio.$k.0 >> $seqres.full 2>&1
|
|
done
|
|
for ((k=1; k <= NUM_JOBS; k++))
|
|
do
|
|
$XFS_IO_PROG -c "truncate 0" \
|
|
$SCRATCH_MNT/direct_aio.$k.0 >> $seqres.full 2>&1
|
|
done
|
|
# Following like will check that pid is still run.
|
|
# Once fio exit we can stop fallocate/truncate loop
|
|
pgrep -f "$FIO_PROG" > /dev/null 2>&1 || break
|
|
done
|
|
wait $pid
|
|
}
|
|
|
|
_scratch_mkfs >> $seqres.full 2>&1
|
|
_scratch_mount
|
|
|
|
if ! _workout; then
|
|
_scratch_unmount 2>/dev/null
|
|
exit
|
|
fi
|
|
|
|
if ! _scratch_unmount; then
|
|
echo "failed to umount"
|
|
status=1
|
|
exit
|
|
fi
|
|
status=0
|
|
exit
|