12 KiB
repo22 G5 compression full manual regression report
Scope and result
- Exact scope: TC003, TC004, TC084-TC092, TC102-TC110, TC143-TC146.
- Count check: 24 requested, 24 executed, 0 duplicate, 0 omitted.
- Result: PASS 23, PARTIAL 1, FAIL 0, NOT RUN 0.
- SHELVED subscenario: TC146 explicit mapped extent only.
- TC146 overall: PARTIAL; HEAD2 PASS, interlaced PASS, explicit extent SHELVED.
- Kernel baseline:
f383bbbbff301a6bde18894f03ab88a8c0cc885a. - Initial and pre-push
xdm/mainbaseline: the same commit. - No repo22 kernel source was changed. No kernel failure issue was opened.
Isolated environment
- Worktree:
/work/build/repo22-manual-g5-20260809T085450Z. - Branch:
manual-g5-20260809T085450Z. - Artifact root:
/work/build/repo22-g5-20260809T085450Z. - Dedicated qcow2 overlay backed by the FreeBSD development base.
- Dedicated SSH forward:
127.0.0.1:9225. - Guest: FreeBSD
15.0-RELEASE-p8, amd64,releng/15.0-n281036-53054229dcb3. - Guest toolchain: FreeBSD clang/LLD 19.1.7.
- Host tools: mkfs/dump/fsck erofs-utils 1.8.6.
- No CI, runner, or wrapper was used. Each Markdown test was issued manually.
Reproducible fixture
tests/g5_fixtures.py generated source content, invoked mkfs with fixed UUID,
timestamp, owner, sort order, and one worker, transformed structured records,
reopened every image, and wrote a field manifest. Two final fresh output
directories produced byte-identical source and image checksum inventories.
SHA256SUMS SHA256 = 8535696f187f818df8b3b30ee35cd8837aceadef9de7a85be1475732dcdf0596
SOURCE-SHA256SUMS SHA256 = 145bd663d7552025b486ec15c0b4c1c0ce99affa7728dc4d762134bdc92420c3
fixture manifest SHA256 = 63ecdb46f8cc3c04e348e24e0f1306ad5e4606bf1fa108919f946515d7b41d63
image count = 25
source count = 19
guest hash verification = 25 images, 19 sources
Image hashes
| Image | SHA256 |
|---|---|
deflate-level1.erofs |
58dc78da2ec5a751688f53c4eee34f94b7f828d68b7225aea006d08374187bfe |
deflate-level6.erofs |
4a3b5d2ce6b8d1bad23aa2c4d4ce38f83bc0e6642523e9165e58afe03e030c28 |
deflate-level9.erofs |
c4bf219a5130d475c26452a1a5346c63ed1f434afd4315972ee30ebc66f9c751 |
deflate-partial-ref.erofs |
fccb2f4038dca8b7277984e255a304bb6eee5de51fedd7b7261ef4f879362c81 |
deflate-partial-ref-corrupt.erofs |
063e1bc07d2c3a3bf3b17c0cce0237eca7000eb16abdf8a1b4428d8cc7880811 |
extent-attempt.erofs |
ee7472c23ccffd5eef6f4a3171ea53ae2e840f8a1ea417b2630065175ecf3225 |
head2.erofs |
4948335059e605ff70da4f6e516c4ba24d58313d10e836cc6fe9c9c468775a23 |
head2-corrupt.erofs |
7c25e9c8c767d2717c06b1efc854f0bb3b1f370cf3e2a8e2d53e767918bfe50f |
interlaced.erofs |
7b77055dfae301a0acc3202cf0d7cf7062eb82c6101d16b68c91f70615e1638b |
lz4-compact-4k.erofs |
0701a37430372f1240ad6485c83f0048d97bb49ae1ca85e1423dd05101bf5578 |
lz4-compact-64k.erofs |
967cc1b625546f9f9f881472e71cc3d849c65feb4e98e67fbfdc9b90a4be6dda |
lz4-compact-256k.erofs |
6fbded24756b557c7ce19a5936dcde01fb75d4b1c91b0236fca46ee0c6331db0 |
lz4-full-4k.erofs |
3bc6eb538752673e2b9f905a0382887bccf417574a0d04901932cfeaac258bc7 |
lz4-large.erofs |
0340026fe5fea5fd7c6c4c03f288815bc86c7517c2c2a9a2ca21c61dfb96a973 |
lz4-ztail.erofs |
18cd045d7f2b8e542a0dda6fb0063c266919928e6e485f498ed93c8992d9ae3a |
lzma-level6.erofs |
32107a084b27362a093768b88746c37c2e99a74b9f1301a9d4046988479defe9 |
lzma-large.erofs |
6534870a686c3c5ba58fc665ea4995c07427a15c9d5ac7747690114138adf47d |
lzma-partial-ref.erofs |
fbbcbcb8a178370a8f7665c3e0cff8df5bb6f81c3ba38a0e44c137e8ed165402 |
lzma-partial-ref-corrupt.erofs |
23981af2f4e36f88e382fff975f3c4fb00cb4b02c0f40f10948602ab4ce39f23 |
microlzma-edge.erofs |
27a19758141d64430d7536774fadf34ba7f8befa0bc36442b789e494b4b37d4c |
zstd-level1.erofs |
34f51d5b1273cc3fc9efa458c200cf134dc7dca2c583e577a8d06ad563cfbff6 |
zstd-level15.erofs |
8ca4ba52561cc8903f85048edfd958ef692583479748dcb8aa57e2c7aade1034 |
zstd-level22.erofs |
99f79807ffd9f1216dbd624a2d8ecfcf17c9b42689fef5b5a69d0250ed84e5 |
zstd-partial-ref.erofs |
cdef7c2a397722723dcc762044612a179358f9dbe4dcd879ac08e462cf9628d1 |
zstd-partial-ref-corrupt.erofs |
ed6f4b23f6b6426e6af9180e892f03097d16a6b969edd68ad42d9a1ff8d2325e |
Source hashes
| Source | Size | SHA256 |
|---|---|---|
large/large.bin |
268435456 | 78f61f8eb37b5aeee026b579d244d766935d5655c0ac5383a96f631048611cfd |
levels/level.dat |
8388608 | ddda39737f0f6093e828a032ec161511fefbb1fa361bc6cbffdbc91e48e4c461 |
lz4/compressed.bin |
8388608 | 3ff012b76087c4da65ce0b69813a76f47ea367e95782edf8b8cd6cd3ec4d1880 |
lzma-large/large.bin |
104857601 | de846af6c7e47fac72c0576c449fd0fc1fe9587286c9158ae08c81804c77f66b |
microlzma/one-byte.bin |
1 | 333e0a1e27815d0ceee55c473fe3dc93d56c63e3bee2b3b4aee8eed6d70191a3 |
microlzma/block-4k.bin |
4096 | 42b2e4ac3afeb366a6407573d5a91a961775e0fe374b0941f19681c4e3f9ea96 |
microlzma/boundary-16k.bin |
16384 | 1b5a7306ca67b75c18228d08f281eb7474b31a1a1ccbe4d680b7942fc81265b9 |
partial/a.dat |
1048576 | c7ac0fce9c56d732e4b8328c1ca48ae33ee4d449166bd25d2c88322c1a852d9f |
partial/b.dat |
700000 | 926a9bb05b20cb3da745eaff6e7fec38fb43d7fa155276474367550b67b97589 |
partial/control.bin |
32768 | 7544a26039c5257ee07c1280468edb1f61f0b0edaa25273b15e0252a9cc5c90a |
partial-deflate/a.dat |
1048576 | c7ac0fce9c56d732e4b8328c1ca48ae33ee4d449166bd25d2c88322c1a852d9f |
partial-deflate/b.dat |
100000 | 1fbe057da0cb994652ef664a4aa00628e948578055665160fc63e7079469da21 |
partial-deflate/control.bin |
32768 | 7544a26039c5257ee07c1280468edb1f61f0b0edaa25273b15e0252a9cc5c90a |
shape/shape.dat |
1048576 | 5be510e6b43f1ed0cda4261288ea70df11607b6ced29bc90d32ed2849ecc5e35 |
ztail/inline.dat |
131071 | e54a4bac3b6b1c01ee846dbccdf234ddb30ed06dc13f1af1df0fbbc397431ce5 |
ztail/exact-pcluster.dat |
4096 | 14587a494e72ecdc7d26b4c0b947d91d44eba4365b252d1a4ec10ba979978c52 |
ztail/one-byte-tail.dat |
4097 | 718f4c27896edf8925300c50572df92b9127e56b2b84a3a86ced4d67c3be9596 |
ztail/max-tail.dat |
8191 | 5e1e898dba6a6bbcc8beb0b0b097bc04ecaaf4ad505b77bfb8646a3011628df6 |
ztail/zero-tail.dat |
0 | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 |
Key layout fields
| Fixture | Structured proof |
|---|---|
| LZ4 compact 4K | layout 3, map offset 2183200, h_advise=1 |
| LZ4 full 4K | layout 1, map offset 2183200, h_advise=0 |
| LZ4 compact 64K | layout 3, h_advise=7, max physical pcluster 65536 |
| LZ4 compact 256K | layout 3, h_advise=7, max physical pcluster 262144 |
| ztailpacking | layout 3, h_advise=9, h_idata_size=536, physical bytes 1512-2048 |
| HEAD2 | incompat 2 -> 10, map advise 2 -> 6, first record 1 -> 3, pblk 1 |
| interlaced | layout 3, h_advise=49, 52 compressed, 1 plain, first transition 999593 |
| explicit attempt | layout 1, map offset 1312, h_advise=2, explicit bit absent |
The first HEAD2 logical pcluster ends at 326114; the boundary read started at 326000. The interlaced boundary read started at 999000 and crossed the proven transition at 999593.
Partial-reference fields after reopen:
| Algorithm | a/b size | a/b pblk | b partial advise | b compressed blocks |
|---|---|---|---|---|
| DEFLATE | 1048576 / 100000 | 1 / 1 | 32769 | 2 -> 17 |
| ZSTD | 1048576 / 700000 | 1 / 1 | 32769 | 1 -> 1 |
| MicroLZMA | 1048576 / 700000 | 1 / 1 | 32769 | 1 -> 1 |
Targeted corruption fields:
| Target | Algorithm | Pcluster | Patch |
|---|---|---|---|
DEFLATE /a.dat |
2 | 4096 + 69632 | offset 8055, length 64 |
ZSTD /a.dat |
3 | 4096 + 4096 | offset 8073, length 64 |
MicroLZMA /a.dat |
1 | 4096 + 4096 | offset 7957, length 64 |
HEAD2 /shape.dat |
0 | 4096 + 65536 | offset 4096, length 64 |
Every corrupted image retained a valid superblock checksum. Each read was
bounded by timeout 20, returned errno 5, and left control.bin readable
where the fixture included one.
Build and TC145
The invalid build value failed with rc 1 and the exact message
WITH_ZSTDIO must be 0 or 1.
| Build | Size | SHA256 | Undefined-symbol gate | Guest |
|---|---|---|---|---|
WITH_ZSTDIO=0 |
73896 | e103ebbaf7faf8041448d93022be44e7c93822a45a36a69bca2b7a2107461d09 |
no ZSTD_*, no bcmp |
file ID 5 load/unload PASS |
WITH_ZSTDIO=1 |
78728 | 56ffcce006eed1e555121d9b8f523578272ac3d82c27a19b635d0a0a664c8370 |
five formal API names, no bcmp |
file ID 5 load/unload PASS |
The enabled undefined ZSTD set was exactly
ZSTD_DCtx_setParameter, ZSTD_createDCtx_advanced,
ZSTD_decompressStream, ZSTD_freeDCtx, and ZSTD_isError.
The disabled module read the LZ4 control hash
3ff012b76087c4da65ce0b69813a76f47ea367e95782edf8b8cd6cd3ec4d1880.
A direct ZSTD mount returned rc 1 with the required message; truss proved
nmount returned ERR#45 EOPNOTSUPP. The enabled module read ZSTD hash
ddda39737f0f6093e828a032ec161511fefbb1fa361bc6cbffdbc91e48e4c461.
Per-TC results
| TC | Manual evidence | Result |
|---|---|---|
| TC003 | compact LZ4 full hash/cmp; first 1024 bytes cmp | PASS |
| TC004 | LZMA level 6 full hash/cmp; 102400/10240 and EOF 10000 cmp | PASS |
| TC084 | full-index LZ4 full hash/cmp; 4000/8192 cross-extent cmp | PASS |
| TC085 | 256 MiB full hash/cmp; 50/200 MiB ranges and two 4K offsets cmp | PASS |
| TC086 | deterministic sequential 4K and 1 MiB block reads both full cmp | PASS |
| TC087 | offsets 0, 4096, 65536, 1048576, and 8384512 source cmp | PASS |
| TC088 | 4K/64K/256K images full hash and 409600/40960 source cmp | PASS |
| TC089 | 0/4096, 4096/4096, 2048/4096, and 0/16384 source cmp | PASS |
| TC090 | 0/65536, 4096/4096, 65504/64, and 0/262144 source cmp | PASS |
| TC091 | ztail full hash/cmp and final 4096 bytes cmp | PASS |
| TC092 | actual 4096, 4097, 8191, and 0-byte files full hash/cmp | PASS |
| TC102 | DEFLATE level 1 full hash/cmp and two fixed ranges | PASS |
| TC103 | DEFLATE level 6 full hash/cmp and two fixed ranges | PASS |
| TC104 | DEFLATE level 9 full hash/cmp and two fixed ranges | PASS |
| TC105 | ZSTD level 1 full hash/cmp and two fixed ranges | PASS |
| TC106 | ZSTD level 15 full hash/cmp and two fixed ranges | PASS |
| TC107 | ZSTD level 22 full hash/cmp and two fixed ranges | PASS |
| TC108 | 104857601-byte LZMA level 6 full hash/cmp; 0/50/99 MiB ranges; active 0 | PASS |
| TC109 | actual 1B/4K/16K files match; 16K inode proven compressed LZMA | PASS |
| TC110 | valid LZMA control; targeted read EIO; same-image control; active 0 | PASS |
| TC143 | DEFLATE/ZSTD a+b full, partial ranges, targeted EIO, controls, active 0 | PASS |
| TC144 | MicroLZMA a+b full, partial ranges, targeted EIO, control, active 0 | PASS |
| TC145 | invalid gate, both builds/symbol sets/KLDs, disabled rejection, enabled read | PASS |
| TC146 | HEAD2 PASS; interlaced PASS; explicit mapped payload SHELVED | PARTIAL |
TC108 used a 1800-second hard timeout for each complete read under QEMU TCG. It completed without timeout; the long duration was diagnostic only.
Explicit extent disposition
erofs-utils 1.8.6 source had zero matches for
Z_EROFS_ADVISE_EXTENTS, z_erofs_extent_recsize, and the on-disk
struct z_erofs_extent. The fresh --max-extent-bytes=65536 attempt remained
ordinary full-index metadata. The structured transformer refused an
unverifiable metadata/payload relocation. Existing review_fixtures.py only
builds a negative pa + plen overflow extent table, not a valid mapped
payload.
FreeBSD and Linux ABI/control flow for 4/8/16/32-byte records was reviewed.
That is static support, not dynamic positive coverage. Full details and
acceptance criteria are in issues/extent-metadata-fixture-unavailable.md.
Stability and cleanup
- Every mount was read-only and every md provider was detached.
- All corruption probes returned errno 5 before their 20-second timeout.
- No dmesg delta, panic, trap, or OOM was observed.
- EROFS active allocations returned to zero after each corruption/large test.
- Final guest verification: 25 image hashes and 19 source hashes matched.
- Final guest: zero mounts, zero md providers, no EROFS allocator row, no EROFS KLD, and responsive FreeBSD 15.0-RELEASE-p8.
- The dedicated VM was powered off and port 9225 was released after evidence collection.