]> git-server-git.apps.pok.os.sepia.ceph.com Git - xfstests-dev.git/commitdiff
generic/615: fix loop termination failures
authorDarrick J. Wong <djwong@kernel.org>
Wed, 13 Dec 2023 22:34:33 +0000 (14:34 -0800)
committerZorro Lang <zlang@kernel.org>
Fri, 15 Dec 2023 18:00:41 +0000 (02:00 +0800)
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>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Zorro Lang <zlang@redhat.com>
Signed-off-by: Zorro Lang <zlang@kernel.org>
tests/generic/615

index 4979306d56e3b92f9d585011dd84ba7e9c957c71..9411229874c57668289fd43826b8b67e13a823dd 100755 (executable)
@@ -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