# repo22 G6 Chunk and Multi-Device Manual Regression Date: 2026-08-09 Executor: G6 manual agent Source baseline: `6b33b4afb490be7d6fec70e499469c306a58435d` Scope: `TC006`, `TC093`-`TC101`, `TC118` (11 exact IDs) ## Result PASS. All 11 requested test cases passed. There are no KFAIL, SHELVED, or ENV results, no duplicate IDs, and no omitted IDs. | Status | Count | | --- | ---: | | PASS | 11 | | KFAIL | 0 | | SHELVED | 0 | | ENV | 0 | | Duplicate | 0 | | Omitted | 0 | No kernel source was changed. `git diff -- src` was empty after testing. ## Environment and build identity - Worktree: dedicated sparse worktree and branch `manual-g6-20260809T114414Z`, based directly on `xdm/main` at the source commit above. - VM: dedicated qcow2 overlay, QEMU TCG, 6144 MB, 4 vCPUs, SSH forward `127.0.0.1:9226` only. - Guest: FreeBSD `15.0-RELEASE-p8` amd64, `releng/15.0-n281036-53054229dcb3`, OSREL `1500068`. - Guest kernel SHA256: `b9abf7b58f9dd4d87f14d2fbc306cf255e6eadc47b8ae885a230f65e28be4562`. - Tracked build sys source: `REVISION=15.0`, `BRANCH=RELEASE-p9`, archived from the same repository commit; archive SHA256 `66c457159b758ab1a5d298292b81bd29ab439ca4ab396091602e030da4721cb9`. - Build configuration: native guest build, `WITH_ZSTDIO=1 FREEBSD_SRC=/root/freebsd-src`. - KLD SHA256: `d5ff5ceef1ad76eb5b608d362b04f3bc40379e58a73d91ed3ae747c035d7b8af`. - repo22 source archive SHA256: `7562e230d165f0c0caa050684a9c1e2bd1bbb178e54a1d5273428435ae512455`. The latest tracked sys source is p9 while the clean guest kernel/userland is p8. Both use OSREL 1500068; the module built and loaded successfully. This source/guest patch-level distinction is recorded rather than hidden. ## Fresh fixture qualification `tests/g6_multidev_fixtures.py` generated every source, primary image, blob, flatdev, and negative image from zero with erofs-utils 1.8.6. No old test image or report was an input. - Generator SHA256: `18638aee056e05099b39477fa6ad4d678ab0a74a027cfb45146ae225ff35d950`. - Final manifest SHA256: `b636a52c7b3ec7f2343f07e2d389783c8383ec07d9d9468f7552e817891c3a81`. - Final `SHA256SUMS` SHA256: `ed81d63469b40f1aba691e54a08d39737c71e66d2ff4fef963a0101fa2ad9854`. - Final fixture archive SHA256: `28be1a5cdcebb163710433c9e7c30162c1170312c34d0b286f4143480881d62f`. - Generated set: 62 artifacts, 17 parsed fixtures, 7 table/index negative images, and 10 explicit mutation assertions. - Reproducibility: two clean output directories had byte-identical `manifest.json` and `SHA256SUMS`. - Host fsck extraction qualified the mkfs split image, single-index image, explicit two/three-slot images, table-at-zero, `uniaddr=0`, packed fragment, and the original two-block LZ4 pcluster. - Guest final `sha256 -c SHA256SUMS` returned 0. During qualification, an initial maximum-48-bit negative used all ones. Field review identified that value as the legal chunk hole sentinel. The generator was corrected to the largest non-NULL address `0xfffffffffffe`, regenerated twice, and reverified. Only the intended primary artifact changed; its final SHA256 is `d6f113cb5d2cb7da7f892632930eedf1c84fb494f5e1e4f0d2a852496ee92951`. The corrected kernel read returned `EINTEGRITY`. ## Exact results | Test ID | Status | Manual evidence | | --- | --- | --- | | TC006 | PASS | Direct mkfs split primary/blob; full and cross-32K range `cmp`; external `MDIOCDETACH` returned `ERR#16 EBUSY`. | | TC093 | PASS | 8-byte device-ID-0 indexes with no table; full and cross-32K range `cmp` on the primary provider. | | TC094 | PASS | Reversed slot option order; 1/2/1 full and per-index ranges; `uniaddr=0` with nonzero ID; swapped media `ERR#6 ENXIO`; real external 8192-byte LZ4 pcluster produced the complete 131072-byte source SHA256. | | TC095 | PASS | First/middle/last/cross-index reads; zero-high 48-bit control and nonzero-high unified read; mapped ID 3 returned `read ERR#19 ENODEV`, unaffected file remained readable. | | TC096 | PASS | Parsed normal, table-at-zero, `uniaddr=0`, and high 48-bit tables; `df -k` reported 916 KiB = 229 blocks x 4096; table outside primary returned `ERR#97 EINTEGRITY`. | | TC097 | PASS | Six structural variants each returned `nmount ERR#97 EINTEGRITY`; after every failure md/KLD/consumer state was zero; slot-2 `ENOENT` after slot 1 open released slot 1 immediately. | | TC098 | PASS | Packed NID 42 whole-file fragment; size 100000; full SHA/`cmp` and 8192-byte offset range passed. | | TC099 | PASS | Direct primary+one-blob layout; `df -k` 900 KiB = 225 blocks x 4096; full/range compare; omitted blob option returned `ERR#6 ENXIO`. | | TC100 | PASS | Four providers with option order 3/1/2; full read, 262144-byte range across both transitions, and three concurrent reads passed; missing/duplicate/short returned `ERR#6/22/6`. | | TC101 | PASS | Explicit unified, nonzero-ID flatdev, device-ID-0 flatdev, and nonzero-high 48-bit reads matched source; gap, explicit/unified cross-slot chunk, explicit/flatdev two-block pcluster, and largest non-NULL 48-bit address all returned `read ERR#97 EINTEGRITY`. | | TC118 | PASS | No options/one option/short returned `ERR#6`; duplicate/primary-as-slot returned `ERR#22`; normal detach `ERR#16`; forced orphan cold slot-2 read `ERR#6`; second mount `ERR#16`; primary and external missing paths preserved `ERR#2`. | ## External-data proof The TC094 compressed primary is 8192 bytes and contains only metadata plus its device table. The original pcluster blocks are absent. Its HEAD pblk is the slot-1 unified address, and the 8192 compressed bytes exist only in the external provider. FreeBSD returned the complete source SHA256 `8dd7830946e7154d9feaaa87df6d1d39e47d51da22a690c5469dc4f2955ea0f1`; therefore this was an external compressed read, not table-only parsing. TC101 also mounted generated combined flatdev providers with no `device.N` options. Both nonzero device-ID mapping and device-ID-0 unified mapping returned the same source SHA256 values as explicit providers. erofs-utils 1.8.6 does not qualify these two forms, so the FreeBSD full/range comparisons are the runtime qualification. ## Errno summary - `EBUSY` = 16: live md detach and second concurrent mount. - `ENXIO` = 6: missing/short media and forced-orphan cold I/O. - `ENODEV` = 19: mapped but undeclared chunk device ID 3. - `EINVAL` = 22: duplicate provider and primary reused as an external slot. - `ENOENT` = 2: nonexistent primary or external pathname. - `EINTEGRITY` = 97: malformed tables and complete-extent range failures. ## Lifecycle and platform behavior Every TC ended with zero EROFS mounts, zero md units, no loaded EROFS KLD, and no matching GEOM consumer. TC097 repeated this after each individual malformed table. TC118 forced md92 orphaning, observed cold `read ERR#6 ENXIO`, then unmounted and released the remaining providers without panic or hang. The final dmesg anomaly scan for panic, fatal trap, assertion, watchdog, or EROFS errors was empty. Linux device tables allow table offset zero and skip `uniaddr=0` during device-ID-0 lookup while retaining explicit nonzero-ID selection. FreeBSD matches those on-disk semantics but receives external providers through explicit `device.` mount options and owns read-only GEOM consumers. Consequently FreeBSD-specific `EBUSY` detach and forced-orphan `ENXIO` behavior was tested directly rather than inferred from Linux loop devices. ## Issues None. No kernel failure remained after correcting the fixture's reserved hole sentinel, so no issue file and no source change were created.