[PATCH 08/12] generic/251: use sentinel files to kill the fstrim loop

Darrick J. Wong
2024-11-18T23:03:28Z

From: Darrick J. Wong <djwong@kernel.org>

Apparently the subshell kill doesn't always take, and then the test runs
for hours and hours because nothing stops it. Instead, use a sentinel
file to detect when fstrim_loop should stop execing background fstrims.

Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
---
tests/generic/251 | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/tests/generic/251 b/tests/generic/251
index b432fb11937911..d59e91c3e0a33a 100755
--- a/tests/generic/251
+++ b/tests/generic/251
@@ -125,12 +125,15 @@ fstrim_loop()
wait $fpid
fi
while [ $start -lt $fsize ] ; do
+ test -s $tmp.fstrim_loop || break
$FSTRIM_PROG -m ${minlen}k -o ${start}k -l ${step}k $SCRATCH_MNT &
fpid=$!
wait $fpid
start=$(( $start + $step ))
done
+ test -s $tmp.fstrim_loop || break
done
+ rm -f $tmp.fstrim_loop
}

function check_sums() {
@@ -188,6 +191,7 @@ find -P . -xdev -type f -print0 | xargs -0 md5sum | sort -o $tmp/content.sums

echo -n "Running the test: "
pids=""
+echo run > $tmp.fstrim_loop
fstrim_loop &
fstrim_pid=$!
p=1
@@ -199,8 +203,10 @@ done
echo "done."

wait $pids
-kill $fstrim_pid
-wait $fstrim_pid
+truncate -s 0 $tmp.fstrim_loop
+while test -e $tmp.fstrim_loop; do
+ sleep 1
+done

status=0