DF-4275 / run.log
df4275: replica armed
df4275: tick() dequeued; entering serializer (blocks: stopper holds it)
df4275: stopper HOLDS serializer; tick() INPROG+blocked; calling callout_stop() [epic_stop analog] ...
df4275: expecting permanent 'costp' sleep -- if this returns, no deadlock
df4275: stopper_td=0xfffff8008ed96600 wchan=0xfffff8008f968700 wmesg="costp" (tick_inprog=1)
df4275: stopper_td=0xfffff8008ed96600 wchan=0xfffff8008f968700 wmesg="costp" (tick_inprog=1)
df4275: stopper_td=0xfffff8008ed96600 wchan=0xfffff8008f968700 wmesg="costp" (tick_inprog=1)
df4275: stopper_td=0xfffff8008ed96600 wchan=0xfffff8008f968700 wmesg="costp" (tick_inprog=1)
df4275: stopper_td=0xfffff8008ed96600 wchan=0xfffff8008f968700 wmesg="costp" (tick_inprog=1)
df4275: RESULT: DEADLOCK REPRODUCED -- stopper permanently asleep in "costp" while tick() is blocked on the serializer the stopper holds
--- ps -axo pid,tdo,stat,wchan,comm | grep -E "df4275|softclock" ---
-1 B1 - softclock 1
-1 B2 - softclock 2
-1 B3 - softclock 3
-1 B4 - softclock 4
-1 B5 costp df4275stop
-1 B5 slize softclock 5
-1 B0 - softclock 0
# both sides of the AB-BA visible: df4275stop parked in 'costp' (inside
# callout_stop's synchronous wait, kern_timeout.c:920) while softclock 5 is
# blocked in 'slize' (lwkt_serialize_sleep, kern/lwkt_serialize.c:110) INSIDE
# the tick callback, which needs the serializer df4275stop holds.
--- kldstat | grep df4275 ---
4 1 0xffffffff82600000 1000 df4275rep.ko