Files
erofs-freebsd-out-tree/tests/TC158-48bit-compressed-blocks-hi.md
T
2026-08-13 10:44:59 +02:00

1.7 KiB

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:

    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.