4.6 KiB
Pre10 Batch A: Compatibility Cleanup and Ordering
Scope and baseline
Batch A changes only src/internal.h, src/data.c, and src/zmap.c. It is a
source-only structural change based on commit
b5d6f5ce0696407f9f1cb3f0a9f8cbab643eea49. No QEMU or feature test was run.
The starting blobs were:
| Path | Blob |
|---|---|
src/internal.h |
cfa15de12b73319322ebb33049a7f14b9eb5c271 |
src/data.c |
fdc138b0dad12501d842bae124c8c020793dbc97 |
src/zmap.c |
51170741a0fb5eced814db898c1a233e8a23088a |
Removed compatibility declarations
Repository-wide fixed-string searches covered all files below
repo-pre-10, including source, the Makefile, and documentation. The only
non-definition match was an old review report describing
erofs_is_fileio_mode() as dead code.
| Candidate | Source consumers | Result |
|---|---|---|
EROFS_SYNC_DECOMPRESS_AUTO and related enum values |
0 | Removed |
EROFS_ZIP_CACHE_DISABLED and related enum values |
0 | Removed |
struct erofs_buf |
0 | Removed |
__EROFS_BUF_INITIALIZER |
0 | Removed |
erofs_map_blocks.buf |
0 | Removed with its dead type |
erofs_is_fileio_mode() |
0 | Removed |
These declarations modeled Linux facilities that the synchronous contiguous- buffer FreeBSD path does not implement. Their removal does not replace or alter the mount-owned decoded LZMA extent cache introduced in Pre9.
Declaration and definition order
internal.h now exposes explicit groups for buffer/device I/O, inode/vnode
lifecycle, directory operations, logical mapping/file data, compressed
mapping/data, compression configuration/backends, and VOP vectors. Existing
signatures are unchanged.
In data.c, the regular-file wrapper now precedes the symlink wrapper, matching
the header's file-data grouping. Both wrappers retain their original bodies
and continue to delegate to erofs_read_uio().
In zmap.c, z_erofs_read_extent() now follows the overflow-safe extent
position helpers it consumes. The Linux-shared compressed-index and map
functions retain their existing relative order; FreeBSD-only explicit-extent
helpers remain one contiguous responsibility group.
The reordering was deliberately bounded by the existing static call topology:
erofs_check_device_range()remains beforeerofs_map_dev();erofs_inline_tail_start()anderofs_map_blocks_chunk()remain beforeerofs_map_blocks();erofs_bread_device()remains beforeerofs_bread()anderofs_read_physical();erofs_read_uio()remains before both public vnode read wrappers;- compressed-index decode/load helpers remain before their callers;
z_erofs_map_blocks_fo()andz_erofs_validate_extent_table()remain beforez_erofs_fill_inode(); and- fill, full/explicit mapping, and sanity helpers remain before
z_erofs_map_blocks_iter().
No extra static prototype was introduced. Broader movement of
erofs_map_dev() was rejected in this batch because matching Linux's exact
position would either violate the current dependency order or add a prototype
solely to support cosmetic movement.
Preserved behavior
- No function signature, return value, allocation flag, lock operation,
bread/brelseownership, mapping flag, or control-flow statement changed. - No structure field used by runtime code moved or changed.
- The Pre9 decoded extent cache fields, initialization/finalization calls, key, lock, and one-entry-per-mount policy are untouched.
- No Linux page, folio, bio, workqueue, XArray, shrinker, or compatibility wrapper was introduced.
Static validation
| Check | Result | Evidence |
|---|---|---|
| Removed-symbol search | PASS | Every removed enum, type, initializer, helper, and map_blocks.buf access has zero source/Makefile matches. |
| Prototype uniqueness | PASS | Each of the 25 grouped cross-file declarations occurs exactly once in internal.h. |
erofs_read_file() body |
PASS | Parent and working-tree normalized hashes are both acc4cb05f9a1eb4a0066f8e4d6f3e84c8a69cfb70c762233a61ab08e84836aef. |
erofs_readlink_target() body |
PASS | Parent and working-tree normalized hashes are both 73cc37f21f0c66a2c6bb27d39cc9f93f38df1994c7d386dacb5efc7734aa6a89. |
z_erofs_read_extent() body |
PASS | Parent and working-tree normalized hashes are both 9145b1220329a2d113c69971c94537a99467a7252f3ea564b695a4530ea8e11d. |
| Changed-path allowlist | PASS | Only the three source files and this Batch A report changed. |
git diff --check |
PASS | No whitespace errors. |
| QEMU/build | NOT RUN | Reserved for final aggregate Pre10 validation. |
The final Pre10 guest build and smoke run are intentionally deferred to the
aggregate validation stage defined by planning/pre10/validation.md.