⬢ DragonFlyBSD Kernel Audit
DF-3935 / run.log
← back to finding ↓ download raw
# 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).