This commit is contained in:
2026-08-18 09:20:44 +02:00
commit b826cd721a
522 changed files with 93730 additions and 0 deletions
+45
View File
@@ -0,0 +1,45 @@
# Test Case: 48-Bit Extended Compressed Block Count
**Test ID**: TC158-48bit-compressed-blocks-hi
**Category**: Inode and VFS Metadata
**Priority**: Critical
**Regression**: Extended compressed inodes ignored `i_nb.blocks_hi`
## Objective
Verify Linux-compatible union decoding for an extended compressed inode with
`blocks_hi=1`, and exact FreeBSD `va_bytes`/`st_blocks` values through direct and
file-handle/NFS-style getattr paths.
## Fixture
`final_review_fixtures.py` emits `compressed-blocks-hi.erofs` as a small seed.
Its manifest records `blocks_lo`, `blocks_hi`, block size, exact `va_bytes`,
`st_blocks`, and the required sparse provider size. Verify the seed SHA256 before
extending it in the guest.
## Procedure
1. Copy the seed in the guest and create the qualified sparse provider:
```sh
cp compressed-blocks-hi.erofs compressed-blocks-hi-sparse.erofs
truncate -s 17592186056704 compressed-blocks-hi-sparse.erofs
```
2. Attach and mount it read-only with the exact module.
3. Run `final_review_probe stat-blocks` with the manifest's expected value. The
helper compares `stat` and `getfh`/`fhstat` results.
4. Use an FBT entry/return probe on `erofs_getattr` to capture
`a_vap->va_bytes`; require the manifest value.
5. Read at least one block of `/compressed-blocks.bin`, then unmount, detach,
shrink/remove the sparse file, unload DTrace, and unload EROFS.
## Expected Results
- `data_blocks == (1ULL << 32) | blocks_lo`.
- `va_bytes == 17592186052608`.
- Direct `stat` and file-handle `fhstat` both report
`st_blocks == 34359738384`.
- The compressed file remains readable; the high block count is allocation
metadata, not a physical read address.