Files
erofs-freebsd-out-tree/current/report-3/2026-08-09-overall-progress.md
T
2026-08-13 10:44:59 +02:00

6.0 KiB
Raw Blame History

repo22 第三次总体进度报告

更新时间:2026-08-09 UTC

权威验证快照:12351cbb0a593474f4fcef68ffc5218d9c99dd46

最终源码基线:fcc85b93d5f8fd9671686bd68bf3b086c8bd25cf

总体结论

本轮要求的 feature 全面验证、FreeBSD/Linux 行为差异审查、code review 和 style/可维护性优化已经完成。161 个可执行 Markdown 测试均已执行并形成受控 手工证据,最终为 160 PASS、1 PARTIAL、0 FAIL、0 KERNEL-FAIL、0 ENV。

唯一未完全关闭的是 TC146 的 explicit compressed extent mapped-payload 正向 fixture。该问题已按用户授权详细记录并搁置,不是已观察到的 kernel failure 也不影响其他 160 个 TC 的结论。本轮目标因此完成,剩余工作属于已批准搁置项 或后续可选增强。

CI 和自动化 kernel-test harness 不在本轮范围内,未实现也未宣称完成。

已完成内容

  • 完成 TC001-TC161 的规格、执行报告和覆盖矩阵机械审计;TC000 只作为模板。
  • G1-G8 的 156 个表格行覆盖 TC001-TC156,恰好一次,无重复、无遗漏。
  • 完成 TC157-TC161 独立回归,覆盖 explicit extent 全局顺序、48-bit compressed block count、special vnode 组合 setattr、dot-omitted OFF_MAX cookie 和 nm 失败传播。
  • TC010 的 16 TiB-plus statfs、TC060 的 FreeBSD pathconf、TC153 的超大目录索引 均已动态验证并转为 RESOLVED。
  • 完成 superblock、inode、data、directory/namecache、xattr/ACL/metabox、压缩、 multi-device、NFS、pager、错误路径和边界算术的多轮独立 review。
  • 保留 Linux EROFS 的磁盘 ABI、命名、函数顺序和职责拆分作为维护参照,同时以 FreeBSD vnode、GEOM、pager、NFS、ACL、dev_t 和 errno 语义为行为权威。
  • 修正 README 的 NFS stale 承诺:generation 来自 superblock seed 和 inode metadatametadata-identical payload-only replacement 不保证 ESTALE
  • 清理 repo22 内全部 ignored build/object/image/repro/Python bytecode 产物;最终 guest 的 EROFS mount、md、EROFS KLD 和 DTrace KLD 计数均为零。

最终验证统计

状态 数量 说明
PASS 160 具备对应 dated manual report 的 FreeBSD 15 手工证据
PARTIAL 1 TC146HEAD2/interlaced PASSexplicit mapped payload 未完成
FAIL / KERNEL-FAIL 0 无开放 kernel 行为失败
ENV 0 无环境阻塞
SHELVED test case 0 TC146 的子项不另计为 TC

G1-G8 证据来自多个源码提交,不能表述为所有旧 TC 都运行在最终 KLD 上。最终 fcc85b93d 基线接受了 TC157-TC161、相关回归以及双配置 build/load/mount smoke。

最终构建

FreeBSD 15 kernel -Werror 双配置均成功:

配置 KLD SHA256
WITH_ZSTDIO=0 15fda9d334132cd81769ce4dff4f8411a6e2b4cf7531c352530d0de85f42a2d2
WITH_ZSTDIO=1 23782dc0ce7da188807d35020bf2d8c6044b796c5c9a8746b398ba784cd6ad4e

TC161 的私有 nm shim 正确使构建失败且不发布新 KLD;移除 shim 后使用 /usr/bin/nm 的正常重建 exit 0。两个最终 KLD 均完成独立加载和只读挂载 smoke。

Code Review 结论

最终独立复核未发现 P0/P1。已修复的最后一批问题包括:

  • 16/32-byte explicit extent table 全局严格顺序验证;
  • extended compressed inode 的完整 48-bit blocks_hi 解码;
  • special vnode size 与其他 setattr 字段组合时的 false success
  • dot-omitted 目录在 OFF_MAX 的 cookie/offset overflow
  • build.shnm 自身失败的可靠传播;
  • NFS generation 文档与真实实现边界不一致。

从社区第三方维护者视角,未发现仍需消除的非必要 Linux/FreeBSD 结构、命名或 职责差异。保留的差异均来自 FreeBSD kernel API、锁、provider、pager、NFS 或 权限模型要求。

未完成与搁置

唯一批准搁置项是 explicit mapped extent payload

  • erofs-utils 1.8.6 不能生成或独立验证该新格式;
  • 已尝试工具能力扫描、--max-extent-bytes、structured conversion、ABI/control flow 对照以及多类负向 fixture
  • TC157 已证明 16/32-byte unordered table fail closed,但不能替代 mapped payload 的 source-identical 正向读取;
  • 首个非零 lstart 和极大 extent-count 性能边界也保留为可选覆盖风险。

后续执行计划

  1. 等待可生成并独立验证 explicit mapped-payload 的上游工具或可信 fixture。
  2. 获得 fixture 后补充 4/8/16/32-byte 正向 record、partial reference、high words、 binary-search transition 和 final fragment 动态覆盖,使 TC146 从 PARTIAL 转 PASS。
  3. 如后续项目另行启动 CI,再基于现有 Markdown 断言设计自动化;不得把当前手工 PASS 记录直接转换成无条件自动 PASS。
  4. 后续源码变更继续执行受影响 TC、双配置 build、module smoke、scoped Git hygiene 和独立 review,不要求无差别重跑与改动无关的全部历史环境。

相关提交

正式八组手工验证:

  • G1 9ae22009f23a65320730072a780998e80aa9b728
  • G2 aed7b68b79a5bd4115913f8361821c86fd58d2e2
  • G3 381349b3847209a67d669264ac54a50a3599915c
  • G4 f383bbbbff301a6bde18894f03ab88a8c0cc885a
  • G5 c566d8ac6bf8e801082bbccf108451f6ee46ad40
  • G6 f11fff5b8e8050e1017ed86f0bcf71042b2b45aa
  • G7 f3ab2096fea3942317deb83fa051c84d3c124ec2
  • G8 6f336d0a7387c8f110b19abad6e96f3ea17dba2e

最终源码与验证收口:

  • f27b524a35b1c960be7e81884f9b928d9ac907e9metadata boundary 修复。
  • 67d3c057fbcad5adc765ab9927da511e3221ac8fexplicit extent header 解码修复。
  • fcc85b93d5f8fd9671686bd68bf3b086c8bd25cfTC157-TC161 规格与 helper。
  • 12351cbb0a593474f4fcef68ffc5218d9c99dd46:最终手工报告、覆盖、issue 和 README 汇总。

逐项证据见 tests/results/manual/2026-08-09T1804Z-final-review-independent/manual-test-report.md 最终统计口径见 docs/TEST_REPORT.mdtests/TEST-COVERAGE-MATRIX.md