# 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`.
