mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
e714acc0ef
One of the big cpu time consumers when running xfsqa on UML is forking of new processes. when looping lots of times, using 'expr' to calculate the loop counter increment means we fork at least once every loop. using shell builtins means that we don't fork and many tests run substantially faster. Some tests are even runnable with this modification. e.g. 110 went from taking 4500s to run down to 9s with the loop iterators changed to avoid forking. Signed-off-by: Dave Chinner <david@fromorbit.com> Signed-off-by: Christoph Hellwig <hch@lst.de>
109 lines
2.2 KiB
Bash
Executable File
109 lines
2.2 KiB
Bash
Executable File
#! /bin/sh
|
|
# FSQA Test No. 068
|
|
#
|
|
# Test case to reproduce xfs_freeze hang under filsystem load.
|
|
# The fail case for this test is a hang on an xfs_freeze.
|
|
#
|
|
#-----------------------------------------------------------------------
|
|
# Copyright (c) 2000-2005 Silicon Graphics, Inc. All Rights Reserved.
|
|
#-----------------------------------------------------------------------
|
|
#
|
|
# creator
|
|
owner=ajones@sgi.com
|
|
|
|
seq=`basename $0`
|
|
echo "QA output created by $seq"
|
|
|
|
here=`pwd`
|
|
tmp=/tmp/$$
|
|
status=0 # success is the default!
|
|
|
|
ITERATIONS=10
|
|
|
|
_cleanup()
|
|
{
|
|
cd /
|
|
_cleanup_testdir
|
|
|
|
trap 0 1 2 3 15
|
|
exit $status
|
|
}
|
|
|
|
trap "_cleanup" 0 1 2 3 15
|
|
|
|
|
|
# get standard environment, filters and checks
|
|
. ./common.rc
|
|
. ./common.filter
|
|
|
|
# real QA test starts here
|
|
_supported_fs xfs
|
|
_supported_os Linux IRIX
|
|
|
|
_require_scratch
|
|
|
|
echo "*** init FS"
|
|
|
|
rm -f $seq.full
|
|
umount $SCRATCH_DEV >/dev/null 2>&1
|
|
echo "*** MKFS ***" >>$seq.full
|
|
echo "" >>$seq.full
|
|
_scratch_mkfs_xfs >>$seq.full 2>&1 \
|
|
|| _fail "mkfs failed"
|
|
_scratch_mount >>$seq.full 2>&1 \
|
|
|| _fail "mount failed"
|
|
|
|
touch $tmp.running
|
|
|
|
|
|
# start fsstress loop in a background block
|
|
{
|
|
STRESS_DIR="$SCRATCH_MNT/fsstress_test_dir"
|
|
mkdir "$STRESS_DIR"
|
|
|
|
procs=2
|
|
nops=200
|
|
while [ -f "$tmp.running" ]
|
|
do
|
|
# -w ensures that the only ops are ones which cause write I/O
|
|
$FSSTRESS_PROG -d $STRESS_DIR -w -p $procs -n $nops $FSSTRESS_AVOID \
|
|
> /dev/null 2>&1
|
|
done
|
|
|
|
rm -r $STRESS_DIR/*
|
|
rmdir $STRESS_DIR
|
|
} &
|
|
|
|
i=0
|
|
let ITERATIONS=$ITERATIONS-1
|
|
|
|
echo | tee -a $seq.full
|
|
while [ $i -le $ITERATIONS ]
|
|
do
|
|
echo "*** iteration: $i" | tee -a $seq.full
|
|
echo "*** freezing \$SCRATCH_MNT" | tee -a $seq.full
|
|
xfs_freeze -f "$SCRATCH_MNT" | tee -a $seq.full
|
|
[ $? != 0 ] && echo xfs_freeze -f "$SCRATCH_MNT" failed | \
|
|
tee -a $seq.full
|
|
sleep 2
|
|
|
|
echo "*** thawing \$SCRATCH_MNT" | tee -a $seq.full
|
|
xfs_freeze -u "$SCRATCH_MNT" | tee -a $seq.full
|
|
[ $? != 0 ] && echo xfs_freeze -u "$SCRATCH_MNT" failed | \
|
|
tee -a $seq.full
|
|
sleep 2
|
|
|
|
echo | tee -a $seq.full
|
|
let i=$i+1
|
|
done
|
|
|
|
# stop fsstress iterations
|
|
rm $tmp.running
|
|
|
|
# wait for fsstresses to finish
|
|
wait
|
|
|
|
_check_scratch_fs
|
|
|
|
exit 1
|