Files
erofs-freebsd-out-tree/tests/results/manual/2026-08-09T0557Z-review-fixes/manual-test-report.md
T
2026-08-18 09:20:44 +02:00

4.3 KiB

repo22 Review Fixes Manual Test Report

Started: 2026-08-09 05:31 UTC

Completed: 2026-08-09 05:57 UTC

Parent commit: 077b37ab44780a31f6cd76045afe6e0a92f3a5be

Guest: FreeBSD 15.0-RELEASE-p8 amd64, QEMU TCG

Scope and Result

Test Result Evidence
TC154 per-inode NFS generation PASS Same-image remount, same-superblock replacement, malformed replacement
TC155 explicit extent pa + plen overflow PASS Repeated ERR#97 and DTrace device-I/O observation
TC156 inode timestamp validation PASS Five compact/extended corruption fixtures returned ERR#97

Build Results

Both builds ran natively in the guest with FREEBSD_SRC=/tmp/repo22-freebsd15-src and completed with kernel -Werror.

Configuration Module SHA256 Result
WITH_ZSTDIO=0 d6e755c7a75dd5043b603d58215ae3e7c8f29318b31dc1885aa9bb070d6e57a5 PASS
WITH_ZSTDIO=1 b442f9f05af1d1a76801690c83c9a40ec6fc739adb0663e7dacaf837eeb2ecf3 PASS

The disabled module had no undefined ZSTD_* or bcmp symbol. The enabled module referenced only the expected FreeBSD kernel ZSTD API symbols and no bcmp.

Fixture Reproduction

python3 tests/review_fixtures.py make was run twice in independent empty directories with erofs-utils 1.8.6. All nine images were byte-identical between runs, and both SHA256SUMS files self-verified.

Fixture SHA256
nfs-inode-a.erofs 307879542d5bb52ff02fdb12553fee9a94cd1360b99752ebd08bedf9c9dc1c8c
nfs-inode-b.erofs 64ddb0efcb3c5bd092710a3d3a5ea7aaf637c070e2e061dbf9d4538262fa2f49
nfs-inode-corrupt.erofs 5f49bcd9361531c53f6435f53fb10acc579a8ff7fb6716d78da9dff60f7e8539
extent-pa-wrap.erofs 1e49ecf1917265fde9b606e80f7dbae8b14aca8c6f149128b31d6c825da546dd
compact-epoch-range.erofs 3e031196266fe308f5443878cea7afd775c797856dfb4e9ed28d14bf71d81abb
compact-epoch-wrap.erofs 2c3971c42a85494a75317c05b6da3669ea17a0301b7aa36517048d5e6de60259
compact-nsec-invalid.erofs b7137b4b18c121c613689c308d5938339ea3e867723046e268d1949e8328c27b
extended-nsec-invalid.erofs 2d8a05d993155895feba67b2ff2dcad224a590c798925c31708c1b284c7c7ef3
extended-seconds-range.erofs aa9675ac3e857892d182b033bb9f96424364aace84a877d2001f47fa32503e45

TC154

Image A reported FID len=16, pad=0, NID 452, and generation 3895653226; fhstat, stat -f %v, and the fixture manifest agreed. Reusing md90 for an unchanged-image remount preserved the complete handle and the old handle remained readable.

Image B retained fsid 00000034:000000e0 and NID 452 but reported generation 548470773. Both fhstat and fhopen on A's handle returned ESTALE; B's handle succeeded. With the malformed replacement, both old-handle operations returned positive FreeBSD errno 45 (EOPNOTSUPP).

TC155

The fixture mounted and stat reported the 1 MiB target. Two direct reads at logical offset 4096 exited 1; both independent truss runs showed:

read(..., 1) ERR#97 'Integrity check failed'

An io:::start DTrace positive control captured a raw md90 read at physical offset 4096. The failing EROFS read produced no md90 I/O event, proving the wrapped physical address did not reach the provider.

TC156

compact-epoch-wrap and compact-nsec-invalid failed mount directly with rc 1 and traced nmount(...)=ERR#97. compact-epoch-range mounted with root mtime INT64_MAX, while target stat returned ERR#97. Both extended target fixtures mounted successfully and returned ERR#97 for invalid nanoseconds and INT64_MAX+1 seconds. Every failing operation was executed directly and again under truss.

Harness Notes

The first build invocation used absent /usr/src and was rerun with the actual guest source path. One test attempt used an overly narrow KLD filename match and executed no TC step. A second attempt discarded truss's zero wrapper status; the qualified runs record direct command status separately from traced syscall errno. None of these discarded attempts is counted as PASS evidence.

Cleanup

Each qualified run ended with unchanged dmesg line count (123 -> 123), zero EROFS mounts, no md provider, and zero EROFS modules. Raw transcripts, build objects, modules, and generated images remain outside the repository under /work/build and guest /tmp only.