DF-3935 / run.log
# DF-3935 run log — age_stop vs age_tick AB-BA callout deadlock replica
# Guest: DragonFly dfbsd 6.5-DEVELOPMENT #0 Thu Jul 2 06:02:54 UTC 2026 x86_64 (with-src snapshot)
# Session 1 (arm + stop in background, then observe):
$ vm.sh run_root 'kldload /root/kmod/agesink/age_replica.ko && sysctl kern.agereplica.arm=1'
kern.agereplica.arm: 0 -> 0
$ vm.sh run_root '(sysctl kern.agereplica.stop=1 &) ; sleep 8; echo "--- dmesg tail:"; dmesg | tail -6; ...'
kern.agereplica.stop: 0--- dmesg tail:
HAMMER2: INITIATE SPANs
swap low/high-water marks set to 41940/62910
age_replica: loaded (hz=100)
age_replica: armed age_tick replica (non-mp callout, ticks hz/10)
age_replica: tick handler BLOCKED on our serializer (fired=14 ran=13) - entering callout_stop()
age_replica: IF THIS IS THE LAST age_replica LINE, AB-BA DEADLOCK PROVEN (DF-3715 family / age instance)
[ session never returned -- shell tool timeout after 90s; the wedge degraded the
guest far enough (softclock starvation on the callback's CPU) that the ssh
session could not complete ]
# Session 2 (immediate re-check):
$ vm.sh run_root 'ps -ax -o pid,stat,wchan,comm | grep -E "D|costp|sysctl"'
PID STAT WCHAN UCOMM
0 D0s idle swapper
1001 D5 costp sysctl <-- age_stop replica caller wedged in
callout_stop sync wait ('costp',
kern_timeout.c:923)
# Session 3 (30 seconds later — permanence):
$ sleep 30; vm.sh run_root 'ps -ax -o pid,stat,wchan,comm | grep -E "costp"; echo STILL_WEDGED_AFTER_30S'
1001 D5 costp sysctl
STILL_WEDGED_AFTER_30S
# Serial console (vm.sh log) tail at the time:
age_replica: loaded (hz=100)
age_replica: armed age_tick replica (non-mp callout, ticks hz/10)
age_replica: tick handler BLOCKED on our serializer (fired=14 ran=13) - entering callout_stop()
age_replica: IF THIS IS THE LAST age_replica LINE, AB-BA DEADLOCK PROVEN (DF-3715 family / age instance)
[ no further age_replica output -- callout_stop() never returned ]
# Aftermath: vm.sh down issued a clean shutdown; the qemu process never exited
# (guest too wedged), had to be killed before snapshot revert. Guest then reset
# to with-src and verified up (guest_dirty=0 at end of run).