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