4.7 KiB
repo22 remaining compressed mapping manual read report
- Date: 2026-08-08 UTC
- Source baseline:
df5b92c902295dc74a08aef89fd93d698bbddf21 - Remote baseline before testing:
xdm/mainat the same commit - FreeBSD guest: 15.0-RELEASE-p8 amd64, QEMU TCG
- Image tool: erofs-utils 1.8.6
- Scope: kernel mount/read verification for the five previously generated compression layouts only; no source, CI, or test-wrapper changes
Result matrix
| Mode | Fixture proof | Mount | Full SHA256 | Offset/boundary read | Isolated dmesg | Result |
|---|---|---|---|---|---|---|
| Legacy full index | Layout 1, two compressed extents | PASS | EIO, no digest |
EIO at offset 638972 across the 639004 extent boundary |
No panic, trap, integrity, corruption, or decompression-error signature; guest responsive | KERNEL-FAIL |
| 64 KiB pcluster | Layout 3; compr_cfgs big_pcluster; one 1 MiB logical extent backed by 8192 bytes |
PASS | Match | Match at offset 65504, length 64 | No error signature; guest responsive | PASS |
| Inline ztailpacking | ztailpacking; compressed extent at physical 1352..1787 inside metadata block |
PASS | Match | Match at offset 31744, length 2048 | No error signature; guest responsive | PASS |
| Fragments / packed inode | fragments; packed NID; whole-file extent has zero direct on-disk bytes |
PASS | Match | Match at offset 65536, length 8192 | No error signature; guest responsive | PASS |
| Partial reference | /b.dat Layout 1 reuses /a.dat physical extent 8192..12288 at logical 641052..1050624 |
PASS | /b.dat returns EIO |
EIO at offset 641020 crossing into the reused extent; companion Layout 3 /a.dat matches |
No error signature; guest responsive | KERNEL-FAIL |
All five fixtures contain the requested layout. No mode is classified as FIXTURE-NOT-PROVEN or NOT RUN.
Integrity evidence
| Target | Full SHA256 |
|---|---|
| Legacy full reference | 370eb0a8df86868c4842ca535ed64670f0277ea2ed47a703f089bbb13ee4ac52 |
| 64 KiB pcluster, actual and expected | 370eb0a8df86868c4842ca535ed64670f0277ea2ed47a703f089bbb13ee4ac52 |
| Inline ztailpacking, actual and expected | e2aa4a0a0cbcf422f397c7069a38ae0f073781386958e7db0dfa3ff2ca075513 |
| Packed fragment, actual and expected | a3a83e5c524b5ed446a06ce78cf407192a0c80119f15d2bc3489a50515eb49e0 |
Partial-ref /b.dat reference |
61b17076c2dfae88da7912d00df534b894cf6d27178863c6d8e91f8617ebb91e |
Partial-ref companion /a.dat, actual and expected |
370eb0a8df86868c4842ca535ed64670f0277ea2ed47a703f089bbb13ee4ac52 |
Offset-read evidence:
| Mode | Actual | Expected |
|---|---|---|
| Legacy full | f387a3a74488528803454f0c05601fb632d919f1bc5281538f687a3a6231ebea from partial failed output |
941b6e3cb9a7384428d93ca248eb9630782538e04caba30dbfbe31baacca8f60 |
| 64 KiB pcluster | b6ebba880cfcc438044f943370b9936a130ce1cecf13d784a1eb871f0a126182 |
same |
| Inline ztailpacking | 3a630b7e9618c7e27efb1483058baaa0475ca325c3ecafb42778871d700afa96 |
same |
| Packed fragment | a826cc36ad8c9eaa1606713117fcf118b7bae5fee7503b5619dbf024213059db |
same |
| Partial reference | empty output e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 |
941b6e3cb9a7384428d93ca248eb9630782538e04caba30dbfbe31baacca8f60 |
Failure disposition
The legacy full-index image mounts, but both the complete read and a read crossing its compressed-extent boundary fail with EIO. The fixture and its source remain under /work/build/repo22-shape-manual-20260808T1407Z; copies plus per-mode dmesg files remain in the guest under /root/repo22-short-20260808.
The partial-reference fixture is proven: /b.dat reuses the final physical compressed extent of /a.dat. However, /b.dat itself uses Layout 1 and fails before partial-reference semantics can be accepted. The same image's Layout 3 /a.dat reads correctly. This result is therefore a kernel failure with the legacy full-index path as the immediate blocker, not a fixture failure.
Each mode used a separate md attachment and mount lifecycle. Cleanup succeeded after every run, the module remained loaded, and the guest answered a responsiveness check after every failure and pass. The isolated dmesg scans contained no panic, trap, explicit integrity, corruption, I/O-error, or decompression-error message; the two read failures surfaced only as user-visible EIO.
Conclusion
The 64 KiB big-pcluster, inline ztailpacking, and packed-inode fragment read paths pass the requested kernel verification. Legacy full indexes remain broken. The proven partial-reference fixture also fails because its target file traverses the broken Layout 1 path, so partial-reference support cannot be accepted until that blocker is fixed and the same fixture is rerun.