Last reverified 2026-09-15; review round 1 results added 2026-09-16 04:10. Three hosts: aigendu (the share host: kernel
trees, harness repositories, forensics, Claude's memory), bhive (test VM,
the FAIL fault model, kernel build master) and dhive (test VM, the CORRUPT
fault model, benchmark host). Companion documents: TEST-CATALOG.md (every
test campaign, what it proved), README.md (the Stage 0 replay method), the
octopus test plan (~/share/raid56-wh-harness/6.18-octopus-test-plan.md) and
the cover letters (covers/ on zygo-misc-next-zb64).
Conventions that apply everywhere below: push files to the VMs with rsync
(atomic rename), never scp/cp; scripts arrive 0644, so chmod +x locally
first; launch long VM payloads detached (setsid nohup ... &), never through
systemd-run; confirm a launch with pgrep and by its next observable step;
a bare sync on a VM stalls for minutes draining the virtiofs share -- use
sync -f <mnt>; keep loop images on /mnt/wh or /mnt/linux, never /var/tmp
or /; clean /mnt/wh leftovers before a suite (preflight needs 20-25 G free);
after every VM reboot check /etc/cron.d and pgrep for stale launchers.
| host | role | access | notes |
|---|---|---|---|
| aigendu | share host; everything under ~/share is a slow virtiofs/NFS-style share (avoid worktree-heavy git ops) |
local | Claude job scratch: ~/.claude/jobs/<job>/tmp (ephemeral); memory: ~/.claude/projects/-home-aigendu-share-linux/memory/ |
| bhive | test VM, FAIL model (dm-error member), kernel build master, 8 CPU / 15 G | ssh root@bhive; serial console port 23, gdb stub 24 (qemu on the VM host) |
/mnt/linux 88 G LV (kernel trees), /mnt/wh 104 G LV (test volume), bigtest 176 G (Zygo's, untouched), folio_repro_0..7 10 G LVs (soak rig), /root/share = bhive<->dhive shared virtiofs (NOT aigendu's ~/share) |
| dhive | test VM, CORRUPT model (dm-flakey drop_writes + rotating garbage), benchmarks, 8 CPU / 11 G | ssh root@dhive; console 23, gdb 24 |
clone of bhive (2026-08-07), VG renamed dhive-vg; /mnt/linux 181 G, /mnt/wh 150 G, bench 16 G LV (raw-LV A/B); a dhive hang can be qemu-level, cross-check against bhive |
Port triage: 22 dead but 23/24 open = guest wedged/booting, read the console; all three dead = host or LAN. A guest panic leaves 23 answering.
One git object store, several worktrees (git worktree list in ~/share/linux):
| path | checked out | purpose |
|---|---|---|
~/share/linux |
zygo-linus-master-zb64 (keep it there) |
linus/master lane; all lane git is checkout-free (temp GIT_INDEX_FILE, merge-tree --write-tree, commit-tree, update-ref) |
~/share/linux-stable-6.18 |
detached | 6.18 lane worktree (production lane) |
~/share/linux-misc-next |
detached | misc-next lane worktree (submission lane); port-scratch/ = 2026-08-19 port notes, diverged-*.txt |
~/share/kbuild-linux |
wip/slow-path-v2 |
stale build worktree from the #116 liveness-fix build; historical |
Branch naming per lane: LANE/topics/<topic> (patch series), LANE/testing
(octopus merge of every topic on the lane base), zygo-LANE-zb64 (testing +
Zygo's personal/config commits = what gets built). 6.18 lane refs have the
6.18/ prefix, misc-next misc-next/, master none. Priorities: 6.18 =
production, misc-next = submission (covers/ lives there), master = formality
and may drift (not given the raid6 fix).
Lane state 2026-09-17:
| lane | base | topics | testing | zb64 | built as |
|---|---|---|---|---|---|
| 6.18 | stable/linux-6.18.y v6.18.52 (8f3741e6feb0), rebased 2026-09-16 |
11 (stripe-alloc 73 = 40 (the series + v1 refusal + quiesce; the 6.18-only defrag NO_FLUSH commit was dropped at the rebase for Filipe's backport) + the 25-commit ENOSPC/relocation/reclaim chain (v2, landed 2026-09-16) + 7 review-round-1 fixes + b72dc2da property/cache symmetry (2026-09-17); raid56-fixes 10 incl. RO-repair guard; balance-resume 1; delalloc-fixes 2; deadlock-fixes 3; compress-fixes; dedupe-fixes; backref-hang; dev-extent-defrag; prealloc-size; raid6-fixes 2 = the x1 SIMD fix + the DO-NOT-UPSTREAM raid6_pq.algo= pin, kept on the topic 2026-09-17 so it survives rebases) |
f33be9b7d62d |
ddbba0a6148b |
bhive #215 (as cand54 eb742bb0de84, tree-identical); the previous tip 4ec82e513870 = bhive #214 / dhive #77, and dhive #78 = the same tree with KASAN |
| misc-next | kdave misc-next 7c6b5acf3cc7 (rebased 2026-09-16) |
11 (stripe-alloc 39 -- still the pre-chain series: the one-pass port of chain v2 + round-1 fixes + the UAF fix + the property/cache fold is pending; raid56-fixes 9; balance-resume 1; same others; raid6-fixes) | 00d7c119 |
e1e3534fe578 (= 25f61681b3b7 built as dhive #76, + two covers commits) |
dhive #76 (build check only) |
| master | v7.2 + merge window (98f21c54f995, 2026-08-19) |
8 | 194a233b4e5b |
226f1e0f0f3b |
-- |
Other ref namespaces:
refs/wip/<name>/<lane>-... -- candidates and work in progress (~95). Key
ones: refs/wip/cand52/6.18-zb64 (efb22a1e554b = current zb64 + the
raid6_pq.algo knob; bhive #212, dhive #73), refs/wip/cand49/6.18-zb64
(848031137e86, pre-review: lane + v2 + knob; bhive #209, dhive #69),
refs/wip/cand50/cand51 (intermediate round-1 builds; cand50 BUGs at a
runtime enable, cand51 leaves a stale open remainder),
refs/wip/review-fixes/6.18-stripe-alloc (the six round-1 fix commits
before landing), refs/wip/enospc/6.18-stripe-alloc-v2 (b73e951b0183,
the chain as reviewed; its message-edited copy landed),
refs/wip/cand48p/6.18-zb64 (positive control for the lib/raid6 bug),
refs/wip/rbio-steal/*, refs/wip/scrub-ro/*, refs/wip/quiesce/*
(already landed), refs/wip/enospc/misc-next-stripe-alloc (older, pre-v2
misc-next port -- the real port is still to do).refs/heads/6.18/reviews/stripe-alloc-v2 -- the chain as it was reviewed
(25 commits after one fold, two message rewrites); superseded by the topic
since the landing, kept for the review record.refs/backup/<tag>/<lane>/... -- every ref a lane script moved, before it
moved (e.g. refs/backup/raid6x1-2026-09-14/{6.18,misc-next}/{testing,zb64}).refs/heads/<lane>/historic/<name> -- retired debug probes and experiments
with a descriptive top commit, never built or submitted
(6.18/historic/2026-09-13-cand47-debug, 6.18/historic/2026-09-13-enospc-chain-v1).wip/rmw-audit-instr -- the metadata RMW resubmit/logmix instrumentation
(diagnostic only; ask before building).Checkout-free lane tooling: scripts/lane/ in this repository (README there):
lanetopic.sh (fast-forward a topic + re-make the octopus + replay zb64),
lanerewrite.sh, laneretag.sh, lanefix.sh, laneaddtopic.sh (new
one-patch topic), chainv2.sh (rebuild the ENOSPC chain with a drop/fold
plan), rebuildtopics618.sh, enable-quiesce.py (blob-edit example),
kloc.py (code-line deltas), blobedit.py (exact-string source edits on
a ref -> commit, how the round-1 fixes were written). Every script backs
refs up under refs/backup/ and prints a content oracle -- read it before
trusting a result.
Upstream-ready patch files: ~/share/patches/2026-09-12-misc-next/{delalloc-fixes,raid56-rbio-fixes}/
and ~/share/patches/2026-09-14-raid6-x1/ (both path variants + SEND.txt).
/mnt/linux/linux on both (bhive's is the build master; dhive's is
a separate clone -- push branches with git push root@<vm>:/mnt/linux/linux <branch>, the VMs cannot fetch from the share). /mnt/linux/misc-next on
both for the 7.3 lane. Candidate branches are named zb64-candNN (cand49
is checked out on both now). Tracked .config copies: /mnt/linux/config-*./root/build58.sh (bzImage -> /boot/vmlinuz, previous to
/boot/vmlinuz.prev, then a one-shot grub-reboot with the FULL title
"kernel-only vmlinuz (no initramfs, dm-mod.create root)" -- a short title
silently boots stock Debian 6.12). Build numbers are per VM (#NNN in
uname -v): bhive #212 = cand52, #211 = cand51, #210 = cand50, #209 =
cand49, #208 = cand48p, #207 = cand48; dhive #73 = cand52 (#72 was the same
tree, rebuilt after a transient fixdep failure), #71 = cand51, #70 =
cand50, #69 = cand49, #68 = cand48, #66 = 6.18 lane (/boot/vmlinuz.lane618,
own grub entry). panic=15 falls back to stock on a crash.mitigations=off, maxcpus=1,
cpuhp.parallel=0, and raid6_pq.algo=avx2x1 (forces the x1 SIMD
gen_syndrome that the lib/raid6 bug lives in; appended directly to
/boot/grub/grub.cfg because update-grub fails under the dm-mod.create
root; backup grub.cfg.pre-raid6). The knob is the test-only commit
lib/raid6: testing aid: raid6_pq.algo= on the cand branches, never on a
topic./mnt/linux/vmlinux-<build> (bhive:
207/208/209/abba/armA/armB/lockdep; dhive: 142/abba). VMLINUX= env for
the drivers.~/share/btrfs-forensics/console-logs/{bhive,dhive}-console.log
on aigendu (serial port 23).| repository (aigendu) | deployed to | contents |
|---|---|---|
~/share/raid56-wh-harness (git; canonical) |
/root/harness on both VMs (bhive is a git remote of it, push-to-deploy; dhive's clone points at bhive; rsync the whole dir after edits -- to BOTH VMs) |
Stage 0 replay matrix (setup-replay-log.sh, run-workload.sh, replay-matrix.sh, verify.py), the drivers (run-rebase-validation.sh, run-6.18-validation.sh, run-r6c3-validation.sh, run-geometry.sh), every directed reproducer, TEST-CATALOG.md, NOTE-*.md, scripts/ (probes, vm-heartbeat-monitor.sh, lane/), results/ (benchmark CSVs), fixtures/, this file |
~/share/raid56-hang-debug (git since 2026-08-23; history before that reconstructed, see its HISTORY.md) |
/root/raid56-hang-debug on both (rsync) |
the deadlock/soak rig repro-folio-hang.sh (+ churn_writer.py, deduper.py, ballast), repro-reloc-slice-deadlock.sh, min-dedupe-deadlock.sh, repro-standalone.sh, drgn probes (folio_probe.py, rbio_walk.py), extract_ftrace.sh, profile-claim-test.sh, the two deadlock reports, captures/ (every hang capture) |
~/share/vm-scripts (git) |
/root/*.sh, /root/*.py on each VM (./sync.sh push <host>; pull after a launch) |
bhive/ (241 files) and dhive/ (155): after-boot launchers, queue-*.sh candidate queues, benches (bench-ab.sh, bench-n-lv.sh, bench-lv-orch.sh), probes (bg-snap.py, run-overlap.py, storm-snap.sh), guards, build58.sh, raid6-3dev-{test.sh,parity.py} |
~/share/xfstests (git clone) |
/root/xfstests on both |
fsstress at /root/xfstests/ltp/fsstress; dm-log-writes tooling built from it |
~/share/btrfs-forensics (NOT a git repo; bulk only since 2026-09-17) |
-- | the live serial console logs and one 167 MB boot log; everything else moved into this repo's forensics/ (section 7) |
~/share/bees-project |
-- | bees work; /root/bees* on the VMs and the bees logs under /root/share/root-* belong to it, not to this project |
Run on each VM as root; every driver writes a live report.md plus per-stage
logs into a timestamped directory (.aborted suffix if it died early).
| driver | what | env | output |
|---|---|---|---|
run-rebase-validation.sh |
the regression plan: sanity stage0 fsync directed octopus soak (STAGES=, LIST=1, STOP_ON_FAIL=1, BUDGET_SECS=14400, SOAK_SECS=43200, SUT=, VMLINUX=) |
SUT=/mnt/linux/linux (or /mnt/linux/misc-next) |
/root/rebase-validation-<ts>/report.md |
run-6.18-validation.sh (the octopus acceptance suite, called by the driver's octopus stage) |
T1-T13 under a fault present for the whole run, passes P1_online / P2_degraded / P3_stock, 6x3 GiB raid5 + spare; ROLE auto from hostname (bhive=FAIL, dhive=CORRUPT); declared expectations: P1/P2 all 13 PASS, P3 FAIL(exp) allowed, T9 SKIP under CORRUPT; meta_buffer spare metadata chunks and a data-sized T6 shrink keep the small geometry from aborting |
PASSES_RUN=, BUDGET_SECS=, SOAK_SECS=, FILES=, DEV_MB=, CONTINUE_ON_FAIL=1 | /root/6.18-validation-report.md (live), /root/6.18-validation.log; the driver copies them into its run dir |
run-r6c3-validation.sh |
raid6 data + raid1c3 metadata coverage: matrix-stock matrix-sa fsync-sa recovery cdev cstripe (R6_STAGES=) |
-- | /root/r6c3-validation-<ts>/report.md, /root/r6c3-validation-latest -> the 2026-08-28 run (symlink not updated since; use the newest dir) |
replay-matrix.sh (+ run-workload.sh, setup-replay-log.sh, verify.py) |
Stage 0: dm-log-writes replay, cut x torn-tail x dropped-device; WH_TAIL_MODEL=entries (harsh, primary committed-data evidence) or barrier (flush-consistent, the only model where degraded criteria are valid); WH_FSYNC_WINDOW, WH_DEGRADED_CONTINUE/REPLAY/STRICT | see README.md |
per-run CSV + summary in the workdir |
run-geometry.sh |
the raid5 3..10 / raid6 4..10 device sweep under three policies (2026-08-01; raid6 rows over raid1 metadata are weak, see r6c3) | -- | historical |
| round-1 review tests (2026-09-16) | stripe-meta-toggle-test.sh (runtime enable/disable of the property on a live fs with raid56 METADATA: MPROF=raid5/raid6, SMT_MNTOPTS=ssd/ssd_spread/nossd, legacy data extents before the flip, a fill to the metadata edge, then a property-enabled fs disabled and unmounted; pauses the reclaim-regimen service), prealloc-race-test.sh (fallocate storms vs manifest-verified buffered writers at the fill edge), run-meta-fsync-tear.sh + metamix-scan.py (raid56-metadata fsync-window characterization: replay matrix with degraded replay, zero-log fallback, continuation, offline check and the per-stripe tree-block scan; uniform and late-cut passes) |
MPROF, SMT_, PR_, MT_* | /root/smtoggle-*.log, /root/prerace-*.log, /root/meta-fsync-tear-<ts>/ |
| directed stage scripts | balance-reclaim-test.sh (liveness-map regression, both profiles/allocators), fill-edge-debug.sh (FE_DEBUG=0), enospc-dataloss.sh (manifest-verified fill to ENOSPC, MODE=fsync/nofsync), enospc-umount.sh, bg-gate-test.sh, scrub-enospc-repro.sh, nocow-strand-test.sh (needs the wip counters, else exit 77), nocow-ro-drain-test.sh, legacy-conversion-repro.sh, punch-hole-warn-repro.sh, stripe-claimable-warn-repro.sh, stripe-warn-sweep.sh, corrupt-{churn,devices,stripe,recovery}-test.sh, rolling-failure-test.sh, old-stripe-test.sh, metadata-recovery-test.sh, stripe-meta-enospc-test.sh, directed-writehole.sh; directed-expected-warns.txt declares the only WARNs a script may raise; exit 77 = SKIPPED |
-- | per-script log in the run dir |
soak (raid56-hang-debug/repro-folio-hang.sh) |
8 LVs (one removed), optional dm-crypt (SOAK_CRYPT=1), degraded,compress=zstd:3,flushoncommit,stripe_alloc,discard=async, churn/dedupe/snapshot/balance/rm workers, heartbeat + capture on a stall; BACKING=auto/lv/loop |
CRYPT=, MAX=, VMLINUX= | /root/folio-repro.log (the script re-execs into it), captures under /root/share/root-<vm>/folio-capture-* and /mnt/linux/forensics-archive/ (dhive) |
| benches (dhive) | bench-ab.sh LABEL BOOT (arms N non-raid56 / Rfresh / Rfrag / C capacity-at-the-edge, 3 reps), bench-n-lv.sh (non-raid56 on a raw LV, fio with end_fsync), bench-lv-orch.sh / bench-orch.sh (boot alternation lane/chain), fsync-bench*.sh (Zygo's) |
REPS= | /root/bench/results*.csv, summary*.txt, profile-chain.txt (ftrace profile), copies in results/ here |
| probes | raid6-3dev-test.sh / raid6-3dev-parity.py (3-device raid6 write/scrub/degraded read + raw P/Q classifier; the lib/raid6 x1 positive control), raid6-3dev-repro.sh (minimal reproducer, this repo), sys-chunk-rmw-probe.sh (does a raid56 SYSTEM chunk take real write holes: yes), why-rmw*.sh (RMW attribution from tracepoints), stripe-pessimism-measure.sh, rbio-cache-bench.sh, stripe-meta-bench.sh, t5b-writeback-probe.sh, fsync-* forensics |
-- | -- |
| monitors (aigendu, under the Monitor tool; they die at context compaction -- re-arm) | scripts/vm-heartbeat-monitor.sh <state> bhive dhive (heartbeat-based: reports LOSS of signal, D-state, taint, progress) and the per-run acceptance monitor generated in the job tmp |
-- | job tmp |
Lane tip 2026-09-17: zygo-6.18.x-zb64 = 22886dbec236 (testing f0f47dd9eb1d), tree-identical to cand54 (refs/wip/cand54/6.18-zb64 = eb742bb0de84, bhive #215): the rebased lane + b72dc2da. Validated: the rebased lane (4ec82e513870, #214) passed the full acceptance on bhive 2026-09-17 (sanity/stage0/fsync PASS, octopus P1/P2/P3 13/13 each, no unexpected failure) and P1/P2 13/13 under KASAN on dhive #78; cand54 passed the directed stage (bg-gate property cases GREEN, balance-resume PASS). Pending candidate: refs/cand/parkref/{topic,testing,zb64} (zb64 5f3b8f082462, rebuilt on the post-knob lane) adds
1459c2b83afb "btrfs: stripe_alloc: hold a reference on parked rbios", the fix for the
parked-rbio use-after-free root-caused in forensics/parked-rbio-uaf-rootcause-20260917.md.
Built as bhive #217 with KASAN; the lane refs do not move until it is green (candidate made
with scripts/lane/candtopic.sh, which is lanetopic.sh without the ref updates). bhive
built the pre-re-message commit 8f67cef3e02c; the tree is byte-identical
(5e6c05d6fbba), so that run validates the candidate as it stands.
The history below is the round-1 candidate sequence.
Current candidate = cand53 (refs/wip/cand53/6.18-zb64 = 6.18 zb64
[lane incl. the landed chain and the SEVEN round-1 fixes] + the
raid6_pq.algo= knob), bhive #213 / dhive #74. cand52 (2b724c29822c,
bhive #212 / dhive #73) had six of the seven; the seventh
(btrfs_free_open_stripe_runs teardown) came from a mount-fail
assertion the tear run hit on cand52. cand49 (848031137e86,
bhive #209 / dhive #69) was the pre-review candidate: lane + v2 + knob,
booted with avx2x1 forced; cand48 = the same without the raid6 fix.
| suite | host / kernel | date | result | artifact |
|---|---|---|---|---|
| rebased 6.18 (v6.18.52) full acceptance, FAIL model | bhive #214 (4ec82e513870) |
2026-09-17 07:03 | sanity/stage0/fsync PASS; octopus 39/39 (P1, P2, P3 all 13/13), no unexpected failure; directed FAIL(1) = only the property/option case that b72dc2da fixes (RED control) |
bhive:/root/rebase-validation-20260916-215858/ |
| rebased 6.18 under KASAN, CORRUPT model (parked-rbio UAF repro) | dhive #78 (4ec82e513870 + KASAN) |
2026-09-17 | P1 and P2 13/13 each, collapsed and default park knobs, NO KASAN report yet; round 2 = P1-only alternating regimes running | dhive:/root/kasan-repro-loop*.log, /root/kasan2-loop*.log, forensics/dhive-rmw-listdel-oops-20260916.txt |
cand54 = lane + b72dc2da (property/cache symmetry): directed stage |
bhive #215 (eb742bb0de84) |
2026-09-17 09:00 | directed PASS: bg-gate property cases all OK ("no cache, never had v1" GREEN, was RED on #214), balance-resume-test PASS (cursor persisted, resume -dvrange=0..N, full chunks below the cursor relocated); promoted as the lane tip |
bhive:/root/rebase-validation-20260917-071344/, /root/cand54-*.log |
cand55 = lane + 1459c2b83afb (parked-rbio refcount fix), KASAN |
bhive #217 (built from 8f67cef3e02c; that build predates the raid6 knob's promotion, so its tree is the candidate minus lib/raid6/algos.c) |
2026-09-17 | RUNNING: P1_online CORRUPT at the default park knobs, stopping on a KASAN report, a refcount_t: warning (mis-balanced get/put) or any raid56 WARNING (a leaked park reference); dhive #78 stays PRE-fix as the control |
bhive:/root/after-boot-kasan-fix.log, /root/kasanfix-loop*.log, forensics/parked-rbio-uaf-rootcause-20260917.md |
| review round 1: runtime toggle under raid56 metadata | cand49 #209/#69 (RED), cand50 #70 (BUG at enable), cand51 #71 (stale remainder), cand52 #212/#73 PASS raid5, raid6, raid5+ssd_spread, raid6+ssd | 2026-09-16 | RED: disable left counters stale, runs unretired, unmount asserted (btrfs_free_block_groups.cold); cand50: stripe_unusable_scan assertion (free space in the legacy allocation cluster); cand52: all variants PASS, only the enabling transaction's own RMW reports remain |
bhive:/root/smtoggle-*-cand52.log, dhive:/root/smtoggle-*-cand5[012]*.log; console ~/share/btrfs-forensics/console-logs/dhive-console.log (the cand49 oops, the cand50 BUG) |
| review round 1: prealloc race | cand49, cand51, cand52 (both hosts) | 2026-09-16 | PASS everywhere (0 drops, 0 lost, 6 rounds) -- the window does not reproduce; the fix stands on inspection | /root/prerace-cand*.log |
| review round 1: directed regression set | dhive #71 (cand51) PASS; bhive #212 / dhive #73 (cand52) FAIL(1) each = harness criteria (bg-gate expected the now-silenced uncovered-RMW line; nocow-ro-drain failed on an incidental full-fs COW ENOSPC with the nocow data intact) -- both tests fixed, re-run on cand53 | 2026-09-16 | fixed candidate green; the two cand52 FAILs were test-criterion artifacts, not kernel bugs | dhive:/root/rebase-validation-20260916-012505/report.md (cand51 clean) |
| raid56-metadata fsync-window tear, uniform cuts (early, zero-log fallback) | bhive #209 (cand49) | 2026-09-16 01:42 | raid5 (5 dev): 40 armed, 0 committed damage, 45 continuations clean, degraded replay refused 2/40 (both on the member the scan named, "Failed to recover log tree" -5) -> zero-log: committed intact 2/2, continuation clean 2/2; raid6 (6 dev, adjacent-pair drops): 48 armed, 0 damage, 54 continuations, 0 refusals; no torn stripe held committed blocks; no mixed rows (cuts spread over the fsync stream) | results/meta-fsync-tear-cand49-20260916/ (this repo), bhive:/root/meta-fsync-tear-20260916-004215/ |
| raid56-metadata fsync-window tear, 4 passes (raid5/raid6 x uniform/late) | bhive #213 (cand53) | 2026-09-16 09:02 | 162 armed cases: 0 committed-data damage, 0 torn stripe held a committed tree block, 0 MIXED (no log+non-log co-location even with commit-landing late cuts); degraded replay refused only 2/40 raid5-uniform (log tears), ro,degraded,rescue=nologreplay recovered the committed set intact 2/2 (825 files); raid6 48/48 + 36/36 replayed; taint 0, no crash (the teardown fix held) |
results/meta-fsync-tear-cand53-20260916/ (this repo) |
| raid6+raid1c3 coverage, 7/7 | bhive #209 | 2026-09-15 00:56 | all stages PASS, taint 0; matrix stock RED (72 rows, 27/27 controls), stripe_alloc GREEN 43/43 continuations, strict fsync 24 cases zero loss, recovery PASS, cdev stock 10 dropped / sa 0, cstripe stock 570 / sa 0 | bhive:/root/r6c3-validation-20260914-220341/ |
| raid6+raid1c3 coverage, 7/7 | dhive #69 | 2026-09-15 00:57 | same, taint 0 | dhive:/root/r6c3-validation-20260914-220713/ |
| raid6 3-device parity probe | both, cand49 | 2026-09-14 | P == D0 and Q == D0 -- parity CORRECT with avx2x1 forced; cand48p (#208) oopses in 35 s |
/root/raid6-3dev-parity-cand49-avx2x1.log; ~/share/raid56-wh-harness/forensics/bhive-cand48p-forced-avx2x1-3dev-oops-20260914.txt |
| octopus FAIL model, 12 h soak | bhive #207 (cand48) | 2026-09-14 03:54 | 3 loops, P1 13/13 x3, P2 13/13 x3, P3 13/13 + 12/13 + 12/13 (T8 FAIL(exp) = 20 ms expedited-RCU config artifact), no unexpected failure, taint 0 | bhive:/root/octopus-cand48-soak.log, /root/6.18-validation-report.md; the first cand48 run bhive:/root/rebase-validation-20260913-052255/ shows directed FAIL(1) (nocow-ro-drain harness false FAIL, fixed) and octopus FAIL(1) (P2 T6 shrink sizing, fixed; rerun 13/13 in /root/octopus-cand48-p2.log) |
| full acceptance CORRUPT model | dhive #68 (cand48b bd22a0f85984) |
2026-09-14 14:13 | sanity, stage0, fsync, directed, octopus all PASS (12/12 per pass + T9 SKIP) | dhive:/root/rebase-validation-20260914-044429/report.md, /root/rebase-validation-cand48c.log |
| full acceptance CORRUPT model | dhive #67 (cand47) | 2026-09-12/13 | GREEN 12/12/12, taint 0; directed on a healthy fs: fill-edge 0 drops, enospc-dataloss 4x 0 loss, the only allocation-failed dumps reloc=1 | dhive:/root/rebase-validation-cand47.log, /root/relocsplit.log |
| 6.18 lane (no chain) acceptance | dhive #66 (lane618, eac334bfde47) |
2026-09-13 | sanity/stage0/fsync PASS; directed FAIL(1) = the expected fill-edge FAIL (chain missing) + nocow-strand SKIP; octopus P1 12/12+skip, P2 11/12 (T8 = the 20 ms RCU config artifact) | dhive:/root/rebase-validation-20260912-225712/report.md, /root/rebase-validation-lane618.log |
| misc-next lane acceptance (7.3-rc2) | bhive #17 (1ce0b769fa9d, SUT /mnt/linux/misc-next) |
2026-09-13 | sanity/fsync PASS; directed FAIL(1) = the lane's expected fill-edge FAIL; octopus PASS: P1 13/13, P2 13/13, P3 7 + 6 FAIL(exp) with a post-T13 stock relocation abort (geometry); enable-quiesce verified in directed | bhive:/root/rebase-validation-20260912-185127/report.md, /root/rebase-validation-mn0912d.log, /root/octopus-mn0912-t6exp.log |
| A/B bench chain (cand48 #68) vs lane (#66) | dhive | 2026-09-13/14 | raid5+stripe_alloc: seq +32%, rand4k +12%, small files +86% (fragmented), balance -24%; capacity: refill after delete-half+balance -23.6% (accepted pessimism), bigfile -1.5%, smallfill +0.9%; non-raid56 quiet-host raw LV: seq +2.2%, seq+fsync -0.4%, dio -5.9% (overlapping), rand 0.0%, CPU 0.2% | results/bench-*-20260913.*, results/bench-lv-quiet2-cand48-vs-lane618-20260914.* (final), results/bench-cand48-writepath-profile-20260913.txt; raw on dhive:/root/bench/ (the first A/B, results-cand47probes-vs-lane.csv, is confounded by debug probes -- do not quote) |
| eb-leak A/B (stock control) | dhive cand30 P2_STOCK | 2026-09-10/11 | 25 degraded loops, 0 leaks; stripe_alloc lock-free builds 2/21; suggestive, unresolved (probes retired to 6.18/historic/2026-09-13-cand47-debug) |
dhive:/root/octopus-cand30-stock*.log; saved journals bhive:/mnt/linux/forensics-2026-09-12/saved-cand3*-leak-journal.txt |
| r6c3 first runs (6 stages) | bhive #151 / dhive #37; #166 / #40 | 2026-08-28/29 | all PASS both hosts | /root/r6c3-validation-20260828-2346{40,41}/ (the -latest symlink), /root/r6c3-validation-20260907-* (cand23/24 reruns) |
| 24 h octopus endurance | bhive (FAIL) / dhive (CORRUPT), 6.18.42 SUT | 2026-08-12/13 | 4 loops each, all green (12/13 + T9 skip on CORRUPT) | ~/share/raid56-wh-harness/forensics/{bhive-FAIL,dhive-CORRUPT}-24h-final-report.md + .log; /root/6.18-validation-report.attempt1.md (the loop-leak attempt) |
| P3b positive control (pristine 6.18.42) | both | 2026-08-13 | FAIL model: T6 + T12 fail; CORRUPT: T2 + T10 fail -> suite discriminates | ~/share/raid56-wh-harness/forensics/p3b/ |
| geometry sweep (raid5 3..10, raid6 4..10, 3 policies, both crash models) | bhive | 2026-08-01 | clean on every load-bearing claim; barrier model 94/94 continuations | results/ of the run on the VM at the time (see TEST-CATALOG section 1); raid6 rows weak (raid1 metadata) |
| corrupt-churn residual A/B | bhive #167, dhive #42 | 2026-09-04/05 | stock 360 drops vs stripe_alloc 32 / 37 (~91% cut, NOT zero; unattributed -- open) | logs in the run dirs of those dates; NOTE-b-eio-cluster.md |
| claim-scan CPU A/B | dhive (baseline) / bhive (fix) | 2026-08-16 | 1447 us -> 0.8 us per claim, 48 -> 218 files/s | raid56-hang-debug/profile-claim-test.sh; forensics in the memory file stripe-alloc-claim-scan-cpu |
| metadata RMW audit | #112 | 2026-08-05 | stripe_alloc alone 174 committed blocks exposed; + stripe_meta 0 | stripe-meta-bench.sh; NOTE-metadata-full-stripe-options.md |
| metadata crash matrix (raid5 data + raid5 metadata) | bhive #150 / dhive #34 (fix), then landed #151 / #37 | 2026-08-27 | first full 60-case pass ever (the two abandoned-report paths), then the landed code green on both | VM workdirs of that date were recycled; the record is the memory file stripe-alloc-drain-bug and the patch 38 message |
Older run directories are under /root/archive-runs/ on each VM; /root/*.log
(204 on bhive, 113 on dhive) are queue, after-boot and stage logs named after
their candidate (octopus-candNN*.log, rebase-validation-candNN.log,
queue-*.log, after-boot-*.out). The launchers that produced them are
versioned in vm-scripts.
~/share/raid56-wh-harness/forensics/, in git since 2026-09-17)Consolidated from ~/share/btrfs-forensics/ on 2026-09-17; only the bulk stays there, outside git: console-logs/{bhive,dhive}-console.log (live serial captures, GBs, read by the heartbeat monitor) and bulk/dhive-rbio-cache-oops-2026-09-04/dhive-boot-1-kernel.log (167 MB). The current test plan is ~/share/raid56-wh-harness/6.18-octopus-test-plan.md (rev 5); the rev-4 text is forensics/history/.
path (under forensics/) |
what |
|---|---|
history/6.18-octopus-test-plan-rev4.md |
the previous plan text (rev 3 + rev 4 addenda); superseded by the top-level rev 5 |
(~/share/btrfs-forensics/console-logs/) |
the live serial console captures stay OUTSIDE git; dhive-cand45-p3-rbio-uncache-bug-2026-09-12.txt (the plug-list BUG_ON) |
raid6-x1-single-data-disk-20260914.md, bhive-cand48-r6c3-raid6-syndrome-oops-20260914.txt, bhive-cand48p-forced-avx2x1-3dev-oops-20260914.txt |
the lib/raid6 x1 bug: mechanism, original panic, positive control |
dhive-rbio-cache-oops-2026-09-04/ |
the rbio cache-steal UAF (dmesg, octopus report at crash time; the 167 MB boot log is in btrfs-forensics/bulk/) |
dhive-rmw-listdel-oops-20260916.txt |
the parked-rbio use-after-free (2026-09-16 all-CPU wedge): full Oops + analysis |
bhive-cand52-logreplay-fail-bg-refs-bug-20260916.txt |
open META runs leaking bg refs after a failed degraded log replay (fixed by btrfs_free_open_stripe_runs) |
bhive-cand21-raid56-bug726-2026-09-06.txt |
a raid56.c:726 BUG console (cand21) |
balance-zerofill-2026-08-07/ |
the liveness-map corruption: scanners, damage map, generation correlation (also in covers/forensics/) |
gate-deadlock-2026-08-09/ |
the "commit deadlock" that was parking latency: FINDINGS.md, sysrq, the park/adaptive-park A/B diffs and results |
retire-finish-ordered-2026-08-17/ |
the production retire<->finish-ordered deadlock (dmesg, ftrace) |
claimable-above-scanned-2026-08-13/bg-above-scanned.log |
Zygo's field log of the stripe_claimable over-count (the async-discard double credit) |
stripe-alloc-rmw-2026-08-08/ |
why-rmw attribution outputs |
p3b/ |
positive-control reports and logs |
admission-design/claimable-stripe-admission.md |
the admission-gate design |
harness-drafts/ |
data-rmw-counter.patch (now in the tree as stripe_park_stats.data_rmw), corrupt-churn-test-v2.sh (never adopted), park-tunables.patch |
btrfs-unfreeze-degraded-ro-2026-08-11.md, btrfs-progs-v7.0-sast-2026-08-16.txt |
side findings |
{bhive-FAIL,dhive-CORRUPT}-24h-final-report.md |
the August endurance runs |
Hang captures: ~/share/raid56-hang-debug/captures/ (bhive carry-log-tail
deadlock 2026-08-16 with TRIAGE.md, dedupe deadlock, variant B, enospc
spiral, rmw-park lockup, dhive carry control, stock-6.12 minimal) plus the two
reports at the top of that repo. On the VMs: /root/share/root-{bhive,dhive}/
(old /root forensics moved there 2026-08-29: folio captures, spin samples,
bees logs), bhive:/mnt/linux/forensics-2026-09-12/ (saved cand32-39
journals, r6c3-cand48-crash-20260914/), dhive:/mnt/linux/forensics-archive/
(folio captures 2026-08-15..19), bhive:/root/br-stall-02{24,44}.txt (the
one-off balance-reclaim stall stacks).
raid6_pq.algo=sse2x1 as well (only avx2x1
has been forced so far).stripe_park_stats ghost noise on reclaimed
stripes (Zygo's call).r6c3-validation-latest symlink is stale; results/ in this repo
was untracked until this commit; raid6-3dev-repro.sh and
sys-chunk-rmw-probe.sh likewise.