docs(storage): #45 复核结论——卷锁无第二写者,全序列卷锁项关闭(销项) #86

Merged
wandering1 merged 1 commits from execute-issue-45-262ec492e96a into master 2026-11-06 00:05:51 +08:00
Collaborator

This is by an automated agent, not a human.

结论(问题 #45 评估判据落定)

无固件改动必要。 两项确认结果:

  1. 无第二写者——对 master c487ce4 枚举全部生产卷访问点(App/ 与 Drivers/BSP/ 下所有带 FA_WRITE 的 f_open 与 f_unlink/f_rename/f_mkdir/f_opendir):写者 syslog/soe/cfg(含 /prot_set.bin 同后端)/录波段/lftpd,读者 UI 两径,空闲 sync——全部持卷锁;启动期卷写(f_mount/f_mkfs/探针)由 STORAGE_READY 就绪屏障门控,彼时其余任务尚未创建到卷触点。LVGL FatFs 驱动桥未接线(LV_USE_FS_FATFS 默认关),test/board/ 仅测试构建。按 #45 判据关闭「可选全序列卷锁」项。
  2. 存储侧喂狗饥饿未再出现——唯一实证为 2026-10-02 台架轮(并发 FTL 写 → dhara journal 竞争 → 恢复自旋饥饿喂狗点;同日 vol_lock 落地 + IWDG 超时 P0 修复双修);其后 2026-10-25 F2/F3、2026-11-02 录波枚举(卷锁 try 超时 0 次)、2026-11-05 PR #82 补验 STOR soak 均无该签名。dhara try_recover() 自旋有界(DHARA_MAX_RETRIES=8 次 restart → DHARA_E_TOO_BAD),且 NAND 长操作入口 + gd5f_wait_busy 每 100 ms nand_ftl_wd_feed() 直接喂 IWDG——即便自旋落在 defaultTask(喂狗点)内也不饿狗;残留形态 = 有界时长服务延迟,真卡死边界为已声明的看门狗设计说明 §9 R4。dhara 观察行留存,重开判据不变(台架再出饥饿才排期)。

改动(docs-only,44+/5-)

  • docs/架构设计/STM32F4-Base存储架构说明.md:新增 §10.5 卷锁覆盖面审计与 dhara 重试自旋复核——覆盖面清单表 + 自旋有界性 + 复发复核记录(销项结论沉淀处)。
  • docs/任务规划/登记簿.md:§2「可选全序列卷锁」行销项删除;§2 dhara 行现状字段更新(2026-11-05 复核未复发 + 兜底机制指针);§6 队列第 3 项(本评估)销项,uvprojx 观察行升为第 3。
  • docs/架构设计/项目架构总览.md:App/fs/ 行旧「syslog/cfg/lftpd 三条路径」口径更正为现状描述。

验证

  • check_doc_links.py --all --sections-strict 本地实跑 PASS(exit 0);编辑文件字节体检:EF BF BD 0、CR 0、新增行无行尾空白、无 BOM 漂移。
  • 纯文档改动,不触编译与单测钩子;CI 静态门禁按工作流跑。

评估过程与逐条证据回写:issue #45 评论。

This is by an automated agent, not a human. ## 结论(问题 #45 评估判据落定) **无固件改动必要。** 两项确认结果: 1. **无第二写者**——对 master `c487ce4` 枚举全部生产卷访问点(`App/` 与 `Drivers/BSP/` 下所有带 `FA_WRITE` 的 `f_open` 与 `f_unlink`/`f_rename`/`f_mkdir`/`f_opendir`):写者 syslog/soe/cfg(含 `/prot_set.bin` 同后端)/录波段/lftpd,读者 UI 两径,空闲 sync——**全部持卷锁**;启动期卷写(`f_mount`/`f_mkfs`/探针)由 `STORAGE_READY` 就绪屏障门控,彼时其余任务尚未创建到卷触点。LVGL FatFs 驱动桥未接线(`LV_USE_FS_FATFS` 默认关),`test/board/` 仅测试构建。**按 #45 判据关闭「可选全序列卷锁」项。** 2. **存储侧喂狗饥饿未再出现**——唯一实证为 2026-10-02 台架轮(并发 FTL 写 → dhara journal 竞争 → 恢复自旋饥饿喂狗点;同日 vol_lock 落地 + IWDG 超时 P0 修复双修);其后 2026-10-25 F2/F3、2026-11-02 录波枚举(卷锁 try 超时 0 次)、2026-11-05 PR #82 补验 STOR soak 均无该签名。dhara `try_recover()` 自旋有界(`DHARA_MAX_RETRIES`=8 次 restart → `DHARA_E_TOO_BAD`),且 NAND 长操作入口 + `gd5f_wait_busy` 每 100 ms `nand_ftl_wd_feed()` 直接喂 IWDG——即便自旋落在 defaultTask(喂狗点)内也不饿狗;残留形态 = 有界时长服务延迟,真卡死边界为已声明的看门狗设计说明 §9 R4。**dhara 观察行留存**,重开判据不变(台架再出饥饿才排期)。 ## 改动(docs-only,44+/5-) - `docs/架构设计/STM32F4-Base存储架构说明.md`:新增 **§10.5 卷锁覆盖面审计与 dhara 重试自旋复核**——覆盖面清单表 + 自旋有界性 + 复发复核记录(销项结论沉淀处)。 - `docs/任务规划/登记簿.md`:§2「可选全序列卷锁」行销项删除;§2 dhara 行现状字段更新(2026-11-05 复核未复发 + 兜底机制指针);§6 队列第 3 项(本评估)销项,uvprojx 观察行升为第 3。 - `docs/架构设计/项目架构总览.md`:`App/fs/` 行旧「syslog/cfg/lftpd 三条路径」口径更正为现状描述。 ## 验证 - `check_doc_links.py --all --sections-strict` 本地实跑 PASS(exit 0);编辑文件字节体检:`EF BF BD` 0、CR 0、新增行无行尾空白、无 BOM 漂移。 - 纯文档改动,不触编译与单测钩子;CI 静态门禁按工作流跑。 评估过程与逐条证据回写:issue #45 评论。
super_agent_bot added 1 commit 2026-11-05 23:52:28 +08:00
登记簿 §2「可选全序列卷锁」按其判据(无第二写者则关闭)销项:
master c487ce4 枚举全部生产卷访问点——写者 syslog/soe/cfg/prot_set、
录波段、lftpd,读者 UI 两径,空闲 sync——全部持卷锁或走屏障;
启动期卷写由 STORAGE_READY 屏障门控(default_task.c bring-up)。
「存储侧喂狗饥饿」2026-10-02 后无新台架证据:F2/F3(10-25)、
录波枚举(11-02)、PR #82 补验 soak(11-05)均无该签名;dhara
try_recover 自旋有界(8 次 restart 定案 TOO_BAD)且 FTL 入口
nand_ftl_wd_feed() 直接喂 IWDG,观察行留存并更新现状字段。

覆盖面审计沉淀进 存储架构说明 §10.5;登记簿 §6 第 3 项销项、
uvprojx 观察行升 3;项目架构总览 fs/ 行旧「三条路径」口径更正。

评估过程与逐条证据:Gitea issue #45。
wandering1 merged commit 0f2aec8850 into master 2026-11-06 00:05:51 +08:00
wandering1 deleted branch execute-issue-45-262ec492e96a 2026-11-06 00:05:52 +08:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: wandering1/STM32F4-Base#86