update
This commit is contained in:
@@ -0,0 +1,212 @@
|
||||
# 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/main` baseline: 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.
|
||||
|
||||
```text
|
||||
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.
|
||||
Reference in New Issue
Block a user