mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
23f99e864e
While the kill statement added in the previous patch usually suffices to shut down the bash loop that runs the duperemove processes, for whatever reason this sometimes fails to kill duperemove. Kill the duperemove processes directly after removing the run file, which should cause the bash loop to exit immediately. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Eryu Guan <guaneryu@gmail.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
94 lines
2.1 KiB
Bash
Executable File
94 lines
2.1 KiB
Bash
Executable File
#! /bin/bash
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
# Copyright (c) 2018 Red Hat Inc. All Rights Reserved.
|
|
#
|
|
# FS QA Test generic/561
|
|
#
|
|
# Dedup & random I/O race test, do multi-threads fsstress and dedupe on
|
|
# same directory/files
|
|
#
|
|
seq=`basename $0`
|
|
seqres=$RESULT_DIR/$seq
|
|
echo "QA output created by $seq"
|
|
|
|
here=`pwd`
|
|
tmp=/tmp/$$
|
|
status=1 # failure is the default!
|
|
trap "_cleanup; exit \$status" 0 1 2 3 15
|
|
|
|
_cleanup()
|
|
{
|
|
cd /
|
|
rm -f $tmp.*
|
|
end_test
|
|
}
|
|
|
|
# get standard environment, filters and checks
|
|
. ./common/rc
|
|
. ./common/filter
|
|
. ./common/reflink
|
|
|
|
# remove previous $seqres.full before test
|
|
rm -f $seqres.full
|
|
|
|
# real QA test starts here
|
|
_supported_fs generic
|
|
_supported_os Linux
|
|
_require_scratch_duperemove
|
|
_require_command "$KILLALL_PROG" killall
|
|
|
|
_scratch_mkfs > $seqres.full 2>&1
|
|
_scratch_mount >> $seqres.full 2>&1
|
|
|
|
function end_test()
|
|
{
|
|
local f=1
|
|
|
|
# stop duperemove running
|
|
if [ -e $dupe_run ]; then
|
|
rm -f $dupe_run
|
|
$KILLALL_PROG -q $DUPEREMOVE_PROG > /dev/null 2>&1
|
|
wait $dedup_pids
|
|
fi
|
|
|
|
# Make sure all fsstress get killed
|
|
while [ $f -ne 0 ]; do
|
|
$KILLALL_PROG -q $FSSTRESS_PROG > /dev/null 2>&1
|
|
sleep 1
|
|
f=`ps -eLf | grep $FSSTRESS_PROG | grep -v "grep" | wc -l`
|
|
done
|
|
}
|
|
|
|
sleep_time=$((50 * TIME_FACTOR))
|
|
|
|
# Start fsstress
|
|
testdir="$SCRATCH_MNT/dir"
|
|
mkdir $testdir
|
|
fsstress_opts="-r -n 1000 -p $((5 * LOAD_FACTOR))"
|
|
$FSSTRESS_PROG $fsstress_opts -d $testdir -l 0 >> $seqres.full 2>&1 &
|
|
dedup_pids=""
|
|
dupe_run=$TEST_DIR/${seq}-running
|
|
# Start several dedupe processes on same directory
|
|
touch $dupe_run
|
|
for ((i = 0; i < $((2 * LOAD_FACTOR)); i++)); do
|
|
while [ -e $dupe_run ]; do
|
|
$DUPEREMOVE_PROG -dr --dedupe-options=same $testdir \
|
|
>>$seqres.full 2>&1
|
|
done 2>&1 | sed -e '/Terminated/d' &
|
|
dedup_pids="$! $dedup_pids"
|
|
done
|
|
|
|
# End the test after $sleep_time seconds
|
|
sleep $sleep_time
|
|
end_test
|
|
|
|
# umount and mount again, verify pagecache contents don't mutate and a fresh
|
|
# read from the disk also doesn't show mutations.
|
|
find $testdir -type f -exec md5sum {} \; > ${tmp}.md5sum
|
|
_scratch_cycle_mount
|
|
md5sum -c --quiet ${tmp}.md5sum
|
|
|
|
echo "Silence is golden"
|
|
status=0
|
|
exit
|