From 523bbfd0b299175044d4ceaccf8085a4d37eadbf Mon Sep 17 00:00:00 2001 From: Auke Kok Date: Wed, 10 Dec 2025 14:12:31 -0800 Subject: [PATCH] Test export-lookup-evict-race in a loop with tracing. This test hits the unmount hang consistently in our CI the most, so run it in a tight loop and enable tracing. Discard traces when the run succeeded. This will blow up if a hung task timeout occurs, so we should crash on panic and then extract traces from the crash. Make sure we don't wait for an hour before doing so, then, too. Signed-off-by: Auke Kok --- tests/run-tests.sh | 15 +++++++++++- tests/sequence | 59 ---------------------------------------------- 2 files changed, 14 insertions(+), 60 deletions(-) diff --git a/tests/run-tests.sh b/tests/run-tests.sh index 3a6f0377..9a480bae 100755 --- a/tests/run-tests.sh +++ b/tests/run-tests.sh @@ -92,10 +92,14 @@ done T_TRACE_DUMP="0" T_TRACE_PRINTK="0" T_PORT_START="19700" -T_LOOP_ITER="1" +T_LOOP_ITER="100" # array declarations to be able to use array ops declare -a T_TRACE_GLOB +T_TRACE_GLOB=( "scoutfs*" ) + +# CI sets this to 3600, but, for this case we want it very short +echo 30 > /proc/sys/kernel/hung_task_timeout_secs while true; do case $1 in @@ -493,6 +497,11 @@ crash_monitor() bad=1 fi + if dmesg | grep -q "blocked for more than"; then + echo "run-tests monitor saw blocked task message" + bad=1 + fi + if dmesg | grep -q "error indicated by fence action" ; then echo "run-tests monitor saw fence agent error message" bad=1 @@ -504,6 +513,8 @@ crash_monitor() fi if [ "$bad" != 0 ]; then + sync & # maybe this gets logs synced... + sleep .1 echo "run-tests monitor triggering crash" echo c > /proc/sysrq-trigger exit 1 @@ -706,6 +717,8 @@ for t in $tests; do # stop looping if we didn't pass if [ "$sts" != "$T_PASS_STATUS" ]; then break; + else + echo > /sys/kernel/debug/tracing/trace fi done diff --git a/tests/sequence b/tests/sequence index 18eff7cf..8faac301 100644 --- a/tests/sequence +++ b/tests/sequence @@ -1,60 +1 @@ -export-get-name-parent.sh -basic-block-counts.sh -basic-bad-mounts.sh -basic-posix-acl.sh -inode-items-updated.sh -simple-inode-index.sh -simple-staging.sh -simple-release-extents.sh -simple-readdir.sh -get-referring-entries.sh -fallocate.sh -basic-truncate.sh -data-prealloc.sh -setattr_more.sh -offline-extent-waiting.sh -move-blocks.sh -projects.sh -large-fragmented-free.sh -format-version-forward-back.sh -enospc.sh -mmap.sh -srch-safe-merge-pos.sh -srch-basic-functionality.sh -simple-xattr-unit.sh -retention-basic.sh -totl-xattr-tag.sh -quota.sh -lock-refleak.sh -lock-shrink-consistency.sh -lock-shrink-read-race.sh -lock-pr-cw-conflict.sh -lock-revoke-getcwd.sh -lock-recover-invalidate.sh export-lookup-evict-race.sh -createmany-parallel.sh -createmany-large-names.sh -createmany-rename-large-dir.sh -stage-release-race-alloc.sh -stage-multi-part.sh -o_tmpfile.sh -basic-posix-consistency.sh -dirent-consistency.sh -mkdir-rename-rmdir.sh -lock-ex-race-processes.sh -cross-mount-data-free.sh -persistent-item-vers.sh -setup-error-teardown.sh -resize-devices.sh -change-devices.sh -fence-and-reclaim.sh -quorum-heartbeat-timeout.sh -orphan-inodes.sh -mount-unmount-race.sh -client-unmount-recovery.sh -createmany-parallel-mounts.sh -archive-light-cycle.sh -block-stale-reads.sh -inode-deletion.sh -renameat2-noreplace.sh -xfstests.sh