Files
erofs-freebsd-out-tree/tests/results/manual/2026-08-09T1236Z-g5/manual-test-report.md
T
2026-08-13 10:44:59 +02:00

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/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.

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.