diff mbox series

[1/3] generic/615: fix loop termination failures

Message ID 170250687380.1363584.4078567385149829394.stgit@frogsfrogsfrogs (mailing list archive)
State New, archived
Headers show
Series fstests: random fixes for v2023.12.10 | expand

Commit Message

Darrick J. Wong Dec. 13, 2023, 10:34 p.m. UTC
From: Darrick J. Wong <djwong@kernel.org>

On 6.7-rc2, I've noticed that this test hangs unpredictably because the
stat loop fails to exit.  While the kill $loop_pid command /should/ take
care of it, it clearly isn't.

Set up an additional safety factor by checking for the existence of a
sentinel flag before starting the loop body.  In bash, "[" is a builtin
so the loop should run almost as tightly as it did before.

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

Comments

Christoph Hellwig Dec. 14, 2023, 4:44 a.m. UTC | #1
On Wed, Dec 13, 2023 at 02:34:33PM -0800, Darrick J. Wong wrote:
> From: Darrick J. Wong <djwong@kernel.org>
> 
> On 6.7-rc2, I've noticed that this test hangs unpredictably because the
> stat loop fails to exit.  While the kill $loop_pid command /should/ take
> care of it, it clearly isn't.
> 
> Set up an additional safety factor by checking for the existence of a
> sentinel flag before starting the loop body.  In bash, "[" is a builtin
> so the loop should run almost as tightly as it did before.

Loks good:

Reviewed-by: Christoph Hellwig <hch@lst.de>
diff mbox series

Patch

diff --git a/tests/generic/615 b/tests/generic/615
index 4979306d56..9411229874 100755
--- a/tests/generic/615
+++ b/tests/generic/615
@@ -21,11 +21,10 @@  _require_odirect
 
 stat_loop()
 {
-	trap "wait; exit" SIGTERM
 	local filepath=$1
 	local blocks
 
-	while :; do
+	while [ -e "$loop_file" ]; do
 		blocks=$(stat -c %b $filepath)
 		if [ $blocks -eq 0 ]; then
 		    echo "error: stat(2) reported zero blocks"
@@ -39,6 +38,8 @@  _scratch_mount
 
 $XFS_IO_PROG -f -s -c "pwrite -b 64K 0 64K" $SCRATCH_MNT/foo > /dev/null
 
+loop_file=$tmp.loopfile
+touch $loop_file
 stat_loop $SCRATCH_MNT/foo &
 loop_pid=$!
 
@@ -64,6 +65,7 @@  for ((i = 0; i < 2000; i++)); do
 	$XFS_IO_PROG -d -c "pwrite -b 64K 0 64K" $SCRATCH_MNT/foo > /dev/null
 done
 
+rm -f $loop_file
 kill $loop_pid &> /dev/null
 wait