mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
ec295d73ac
Currently generic/075 and generic/112 have two extra fsx passes each that exercise fsx with preallocation, which are only enabled for XFS. These tests can also be run with other file systems, given that the XFS prealloc ioctls are implemented in generic code since the addition of the fallocate system call. This also means a version of XFS that does not support preallocation (e.g. because it always writes out of place) can skip the prealloc tests while still completing the normal fsx tests just fine. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Eryu Guan <guaneryu@gmail.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
152 lines
3.3 KiB
Bash
Executable File
152 lines
3.3 KiB
Bash
Executable File
#! /bin/bash
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
# Copyright (c) 2005 Silicon Graphics, Inc. All Rights Reserved.
|
|
#
|
|
# FS QA Test No. 112
|
|
#
|
|
# fsx (AIO variant, based on 075)
|
|
#
|
|
seq=`basename $0`
|
|
seqres=$RESULT_DIR/$seq
|
|
echo "QA output created by $seq"
|
|
|
|
here=`pwd`
|
|
tmp=/tmp/$$
|
|
status=0 # success is the default!
|
|
trap "_cleanup; exit \$status" 0 1 2 3 15
|
|
|
|
_cleanup()
|
|
{
|
|
cd /
|
|
rm -rf $TEST_DIR/fsx.* $tmp.*
|
|
}
|
|
|
|
# get standard environment, filters and checks
|
|
. ./common/rc
|
|
. ./common/filter
|
|
|
|
_do_test()
|
|
{
|
|
_n="$1"
|
|
_param="$2"
|
|
|
|
out=$TEST_DIR/fsx
|
|
rm -rf $out
|
|
if ! mkdir $out
|
|
then
|
|
echo " failed to mkdir $out"
|
|
status=1
|
|
exit
|
|
fi
|
|
|
|
_filter_param=`echo "$_param" | sed\
|
|
-e 's/-N [0-9][0-9]*/-N numops/' \
|
|
-e 's/-l [0-9][0-9]*/-l filelen/'`
|
|
|
|
echo ""
|
|
echo "-----------------------------------------------"
|
|
echo "fsx.$_n : $_filter_param"
|
|
echo "-----------------------------------------------"
|
|
|
|
# Skip the prealloc runs if the file system does not support preallocation
|
|
if [ "$_n" = "1" -o "$_n" = "3" ]; then
|
|
if [ -n "$testio" ]; then
|
|
return
|
|
fi
|
|
fi
|
|
|
|
# This cd and use of -P gets full debug on $here (not TEST_DEV)
|
|
cd $out
|
|
if ! $here/ltp/fsx $_param -P $here $FSX_AVOID $seq.$_n &>/dev/null
|
|
then
|
|
echo " fsx ($_param) returned $? - see $seq.$_n.full"
|
|
mv $here/$seq.$_n.fsxlog $seqres.$_n.full
|
|
status=1
|
|
exit
|
|
fi
|
|
|
|
cd $here
|
|
_check_test_fs
|
|
}
|
|
|
|
_usage()
|
|
{
|
|
echo "$0: [-l filelen] [-n numops1] [-N numops2]"
|
|
}
|
|
|
|
_process_args()
|
|
{
|
|
OPTIND=1
|
|
while getopts "l:n:N:?" c $@
|
|
do
|
|
case $c
|
|
in
|
|
l)
|
|
filelen=$OPTARG
|
|
param_type="$param_type, overidde -l"
|
|
;;
|
|
N)
|
|
numops2=$OPTARG
|
|
param_type="$param_type, overidde -N"
|
|
;;
|
|
n)
|
|
numops1=$OPTARG
|
|
param_type="$param_type, overidde -n"
|
|
;;
|
|
?)
|
|
_usage
|
|
exit
|
|
;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
# real QA test starts here
|
|
_supported_fs generic
|
|
_supported_os Linux
|
|
_require_test
|
|
_require_aio
|
|
|
|
[ -x $here/ltp/aio-stress ] || \
|
|
_notrun "fsx not built with AIO for this platform"
|
|
|
|
size10=`expr 10 \* 1024 \* 1024` # 10 megabytes
|
|
filelen=$size10
|
|
numops1=1000
|
|
numops2=10000
|
|
|
|
# can override the params here
|
|
_process_args "$@"
|
|
|
|
echo "Params are for $param_type" >>$seqres.full
|
|
echo "Params: n = $numops1 N = $numops2 l = $filelen" >>$seqres.full
|
|
|
|
rm -f $seqres.full
|
|
echo "brevity is wit..."
|
|
|
|
_check_test_fs
|
|
|
|
# check if preallocation is supported, xfs_io resvsp command only prints out
|
|
# messages on failure.
|
|
testfile=$TEST_DIR/$$.xfs_io
|
|
testio=`$XFS_IO_PROG -f -c "resvsp 0 1" $testfile 2>&1`
|
|
rm -f $testfile 2>&1 > /dev/null
|
|
|
|
# Options:
|
|
# -d: debug output for all operations
|
|
# -l flen: the upper bound on file size (default 262144)
|
|
# -o oplen: the upper bound on operation size
|
|
# -N numops: total # operations to do (default infinity)
|
|
# -P: save .fsxlog and .fsxgood files in dirpath (default ./)
|
|
# -S seed: for random # generator (default 1) 0 gets timestamp
|
|
# -x: pre-allocate file space, exercising unwritten extents
|
|
# -A: use the AIO system calls
|
|
|
|
_do_test 0 "-A -d -N $numops1 -S 0"
|
|
_do_test 1 "-A -d -N $numops1 -S 0 -x"
|
|
_do_test 2 "-A -d -N $numops2 -l $filelen -S 0"
|
|
_do_test 3 "-A -d -N $numops2 -l $filelen -S 0 -x"
|
|
|
|
rm -f $seq.*.fsx{good,log}
|
|
exit 0
|