DragonFlyBSD Kernel Audit
DF-2632 / iteration1_assert.log
← back to finding ↓ download raw
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).