97 lines
4.6 KiB
Markdown
97 lines
4.6 KiB
Markdown
# 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 before `erofs_map_dev()`;
|
|
- `erofs_inline_tail_start()` and `erofs_map_blocks_chunk()` remain before
|
|
`erofs_map_blocks()`;
|
|
- `erofs_bread_device()` remains before `erofs_bread()` and
|
|
`erofs_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()` and `z_erofs_validate_extent_table()` remain
|
|
before `z_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`/`brelse` ownership, 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`.
|