mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
aae8fbecf4
Currently wait will do nothing, because $pid is empty due to the fact that the command was ran on the background in a separate shell so we never got the $! set. This is causing unexpected test failures especially under low memory due to the fact that the fsstress is still running when we are checking and comparing quota usage. Fix it by using -w argument for killall that will wait for all processes to actually die before it exits. Signed-off-by: Lukas Czerner <lczerner@redhat.com> Reviewed-by: Eryu Guan <guaneryu@gmail.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
90 lines
2.0 KiB
Bash
Executable File
90 lines
2.0 KiB
Bash
Executable File
#! /bin/bash
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
# Copyright (c) 2006 Silicon Graphics, Inc. All Rights Reserved.
|
|
#
|
|
# FSQA Test No. 270
|
|
#
|
|
# Run fsstress and ENSPC hitters in parallel, check quota and
|
|
# fs consistency an the end
|
|
#
|
|
seq=`basename $0`
|
|
seqres=$RESULT_DIR/$seq
|
|
echo "QA output created by $seq"
|
|
|
|
here=`pwd`
|
|
tmp=/tmp/$$
|
|
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
|
|
. ./common/quota
|
|
|
|
# Disable all sync operations to get higher load
|
|
FSSTRESS_AVOID="$FSSTRESS_AVOID -ffsync=0 -fsync=0 -ffdatasync=0"
|
|
_workout()
|
|
{
|
|
echo ""
|
|
echo "Run fsstress"
|
|
echo ""
|
|
num_iterations=10
|
|
enospc_time=2
|
|
out=$SCRATCH_MNT/fsstress.$$
|
|
args=`_scale_fsstress_args -p128 -n999999999 -f setattr=1 $FSSTRESS_AVOID -d $out`
|
|
echo "fsstress $args" >> $seqres.full
|
|
# Grant chown capability
|
|
cp $FSSTRESS_PROG $tmp.fsstress.bin
|
|
$SETCAP_PROG cap_chown=epi $tmp.fsstress.bin
|
|
|
|
(su $qa_user -c "$tmp.fsstress.bin $args" &) > /dev/null 2>&1
|
|
|
|
echo "Run dd writers in parallel"
|
|
for ((i=0; i < num_iterations; i++))
|
|
do
|
|
# File will be opened with O_TRUNC each time
|
|
su $qa_user -c "dd if=/dev/zero \
|
|
of=$SCRATCH_MNT/SPACE_CONSUMER bs=1M " \
|
|
>> $seqres.full 2>&1
|
|
sleep $enospc_time
|
|
done
|
|
|
|
$KILLALL_PROG -w $tmp.fsstress.bin
|
|
}
|
|
|
|
# real QA test starts here
|
|
_supported_fs generic
|
|
_supported_os Linux
|
|
_require_quota
|
|
_require_user
|
|
_require_scratch
|
|
_require_command "$KILLALL_PROG" killall
|
|
_require_command "$SETCAP_PROG" setcap
|
|
|
|
rm -f $seqres.full
|
|
_scratch_mkfs_sized $((512 * 1024 * 1024)) >> $seqres.full 2>&1
|
|
_scratch_mount "-o usrquota,grpquota"
|
|
chmod 777 $SCRATCH_MNT
|
|
quotacheck -u -g $SCRATCH_MNT 2>/dev/null
|
|
quotaon -u -g $SCRATCH_MNT 2>/dev/null
|
|
|
|
if ! _workout; then
|
|
_scratch_unmount 2>/dev/null
|
|
exit
|
|
fi
|
|
|
|
if ! _check_quota_usage; then
|
|
_scratch_unmount 2>/dev/null
|
|
status=1
|
|
exit
|
|
fi
|
|
|
|
echo Comparing filesystem consistency
|
|
if ! _scratch_unmount; then
|
|
echo "failed to umount"
|
|
status=1
|
|
exit
|
|
fi
|
|
status=0
|
|
exit
|