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

1.8 KiB

repo22 partial-reference fix manual report

  • Date: 2026-08-08 UTC
  • Source baseline: 616d23e59b2bc16d9735ca5ad07502a21153bc0a
  • FreeBSD guest: 15.0-RELEASE-p8 amd64, QEMU TCG
  • Module SHA256: 0270671fd73c4ee604294a5f94863f1fc8cc9a63083a4c83f89887891f06f1b2
  • Scope: partial-reference output range and LZ4 regression only

Root cause and fix

zmap.c correctly marked the reused extent with EROFS_MAP_PARTIAL_REF, but zdata.c always decompressed the complete mapped logical length and passed partial=false. Linux keeps such pclusters in partial-decoding mode and sets the decompressor output size to the highest byte needed by the current read.

The synchronous FreeBSD path now preserves that behavior. For a partial reference, it decodes only through mapoff + want, passes partial=true, and copies exactly the requested want bytes beginning at mapoff. Non-partial extents still require full logical output and retain strict LZ4 trailing-data validation.

Results

Test Mount Full SHA256 Boundary read Result
Partial reference /b.dat PASS 61b17076c2dfae88da7912d00df534b894cf6d27178863c6d8e91f8617ebb91e matches offset 641020, 128 bytes: 941b6e3cb9a7384428d93ca248eb9630782538e04caba30dbfbe31baacca8f60 matches PASS
Legacy full index /shape.dat PASS 370eb0a8df86868c4842ca535ed64670f0277ea2ed47a703f089bbb13ee4ac52 matches smoke only PASS
Compact index /shape.dat PASS 370eb0a8df86868c4842ca535ed64670f0277ea2ed47a703f089bbb13ee4ac52 matches smoke only PASS

./build.sh, kldload, and exact-name kldunload passed. The isolated dmesg delta was empty, with no panic, trap, integrity diagnostic, or decompression error. Build objects, kernel module output, images, and VM overlays were not staged for commit.