DF-2632 / iteration1_assert.log
DF-2632 fix iteration 1 — kernel #1 (defer-in-loop variant), serial console
(captured during the session; guest later killed from DDB):
hammer2: base_insert overlap deferred: parent 0xfffff8011943a100 type 2
elm deadbeef60428000/7 type 2 vs base[0] deadbeef60428000/5 type 2
panic: assertion "chain->core.live_count == 0 && RB_EMPTY(&chain->core.rbtree)"
failed in hammer2_chain_repchange at
/usr/src/sys/vfs/hammer2/hammer2_chain.c:2314
cpuid = 1
hammer2_chain_repchange() at hammer2_chain_repchange+0x269
hammer2_chain_indirect_maintenance() at ...+0x4b7
hammer2_flush_core() at ...+0x91e
hammer2_flush_recurse() at ...+0x224
Debugger("panic")
Root cause of the iteration-1 failure: deferring a single child mid-
collapse lets the maintenance loop's retry machinery skip that (now
reparented) child, leaving it counted in the collapsed chain and tripping
the repchange KKASSERT. Iteration 2 (final fix.diff) aborts the whole
collapse in a pre-flight check before any destructive step instead, and
validated clean (fix_run.log).