ONLY=${ONLY:-"$*"}
-LUSTRE=${LUSTRE:-$(cd $(dirname $0)/..; echo $PWD)}
+LUSTRE=${LUSTRE:-$(dirname $0)/..}
. $LUSTRE/tests/test-framework.sh
init_test_env $@
-. ${CONFIG:=$LUSTRE/tests/cfg/$NAME.sh}
init_logging
-# bug number:
ALWAYS_EXCEPT="$SANITY_BENCHMARK_EXCEPT"
+[ "$SLOW" = "no" ] && EXCEPT_SLOW="iozone"
+
+build_test_filter
MAX_THREADS=${MAX_THREADS:-20}
-RAMKB=`awk '/MemTotal:/ { print $2 }' /proc/meminfo`
+RAMKB=$(awk '/MemTotal:/ { print $2 }' /proc/meminfo)
if [ -z "$THREADS" ]; then
THREADS=$((RAMKB / 16384))
[ $THREADS -gt $MAX_THREADS ] && THREADS=$MAX_THREADS
DEBUG_ON=${DEBUG_ON:-"eval lctl set_param debug=0x33f0484"}
DIRECTIO=${DIRECTIO:-directio}
-[ "$SLOW" = "no" ] && EXCEPT_SLOW="iozone"
-
-build_test_filter
check_and_setup_lustre
assert_DIR
FSX_COUNT=1000
local SPACE=`df -P $MOUNT | tail -n 1 | awk '{ print $4 }'`
+ check_set_fallocate
+
[ $SPACE -lt $FSX_SIZE ] && FSX_SIZE=$((SPACE * 3 / 4))
$DEBUG_OFF
FSX_SEED=${FSX_SEED:-$RANDOM}
rm -f $testfile
$LFS setstripe -c -1 $testfile
- CMD="fsx -c 50 -p 1000 -S $FSX_SEED -P $TMP -l $FSX_SIZE \
- -N $((FSX_COUNT * 100)) $FSXOPT $testfile"
+ CMD="$FSX -c 50 -p 1000 -S $FSX_SEED -P $TMP -l $FSX_SIZE \
+ -N $((FSX_COUNT * 100)) $FSXOPT $testfile"
echo "Using: $CMD"
$CMD || error "fsx failed"
rm -f $testfile
}
run_test fsx "fsx"
+test_fsx_partial_punch() {
+ local fsx_count=100000
+ local testfile=$DIR/f0.fsxfile
+ local fsx_size=5407677 # upper bound file size
+ local fsx_seed=7919
+
+ check_set_fallocate
+
+ rm -f $testfile
+ $LFS setstripe -c -1 $testfile
+
+ #
+ # $fsx_seed, $fsx_count and $fsx_size combination almost
+ # always reproduces the LASSERT under LU-14640. Therefore these
+ # constants are used as reproducer vs using a random value and
+ # hoping it hits the error condition
+ #
+ CMD="$FSX -c 50 -p 1000 -S $fsx_seed -P $TMP -l $fsx_size \
+ -N $fsx_count $testfile"
+ echo "Using: $CMD"
+ $CMD || error "fsx failed"
+ rm -f $testfile
+}
+run_test fsx_partial_punch "Verify fsx with partial punch via fallocate"
+
complete $SECONDS
check_and_cleanup_lustre
exit_status