# repo22 Linux/FreeBSD 结构对齐状态

## 已完成

- 使用 `/work/dev-src-linux/fs/erofs` 的 Linux 7.1-rc1 快照逐文件复核；未使用
  两个实现共享历史的假设。
- `namei.c` 的静态 helper 已从 `erofs_find_target_dirent` 恢复为 Linux 名称
  `find_target_dirent`。
- `lzma.c`、`deflate.c`、`zstd.c` 已按 Linux 职责名调整为
  `decompressor_lzma.c`、`decompressor_deflate.c`、
  `decompressor_zstd.c`。
- 解压后端原型已移入 `internal.h`；MicroLZMA 内嵌 XZ 的 allocator helper
  已限制为编译单元内部符号。
- `src/Makefile` 已按 Linux 的 metadata、压缩调度/映射、算法后端顺序组织，
  并成为 `build.sh` 的唯一源码和模块名来源。
- 受跟踪的对象目录、vnode 生成头和 amd64/x86 机器 symlink 已删除并忽略。

## 保留差异

- `erofs_vnops.c` 承载 FreeBSD vnode、pager、NFS 和只读操作语义。
- `lz4.c` 保持独立，因为 BSD 后端不使用 Linux page/LZ4 调度接口。
- 后端函数保持 BSD 内部 API，而不是复制 Linux decompressor descriptor 和
  page 生命周期。
- FreeBSD 路径返回正 errno，并保留 GEOM/provider、lockmgr 和 vnode 规则。
- Linux `sysfs`、file-backed、fscache、page-cache sharing 和 `zutil` 职责不以
  空文件模拟。
- 当前构建门控仅允许已验证的 FreeBSD 15 `amd64`。

## 2026-08-09 验证

- VM：FreeBSD `15.0-RELEASE-p8` amd64。
- 构建源：FreeBSD `15.0 RELEASE-p9` `sys` 树。
- `WITH_ZSTDIO=0` 构建通过，模块 SHA256：
  `d11d0319dc1d786eaa868a0c05c2abaf43da8480acacb0e1e4b72b7542b05432`；
  无 `ZSTD_*` 未解析符号。
- `WITH_ZSTDIO=1` 构建通过，模块 SHA256：
  `82471f19812e9877ea06901d1ba0cb4378b2bc6476ec70f6e024e0dc777c0c71`；
  编译命令包含 `-DZSTDIO` 并引用 FreeBSD 内核 ZSTD API。
- 启用模块完成加载、`zstd-level1.erofs` 只读挂载、6 个文件读取与 SHA256、
  卸载、md detach 和 KLD unload；测试后无遗留挂载或模块。
