E-31修复:dhara resume失败按错误分类(仅真空白判新卷),mount失败自检上报+主循环有界重试
This commit is contained in:
@@ -6,6 +6,8 @@
|
||||
* 创建日期:2026-07-20
|
||||
* 修改记录:
|
||||
* 2026-07-20 王建锋 创建初始版本
|
||||
* 2026-09-21 E-31 resume 失败按错误分类:仅真空白判新卷,其余失败
|
||||
* 返回 mount 层(禁止静默清 map 触发整卷重格式化)
|
||||
*/
|
||||
|
||||
/* 头文件包含区 */
|
||||
@@ -218,10 +220,28 @@ DSTATUS disk_initialize(BYTE pdrv) {
|
||||
s_cache_dirty = 0;
|
||||
|
||||
{
|
||||
dhara_error_t err;
|
||||
dhara_error_t err = DHARA_E_NONE;
|
||||
if (dhara_map_resume(&s_map, &err) < 0) {
|
||||
DBG_INFO("No valid map found, creating fresh (err=%d)", err);
|
||||
dhara_map_clear(&s_map);
|
||||
if (err == DHARA_E_TOO_BAD) {
|
||||
/* 扫描全程 I/O 干净且无 checkpoint = 真空白卷(出厂首启 /
|
||||
* 显式格式化后);失败的 resume 已把 journal 复位为空态 →
|
||||
* 按新卷处理,由上层自动建卷(此处 dhara_map_clear 为空操作:
|
||||
* resume 失败时 count 已清零,map 本已为空)。 */
|
||||
DBG_INFO("No valid map found (err=%d), creating fresh", err);
|
||||
dhara_map_clear(&s_map);
|
||||
} else {
|
||||
/* E-31(2026-09-21 审计 P0 修复):非"空白"错误(ECC /
|
||||
* BAD_BLOCK / CORRUPT_MAP / 瞬态 I/O 等)= 真实完整性故障——
|
||||
* 芯片上 journal 可能仍持有有效 checkpoint。旧行为把任何失败
|
||||
* 当新卷清 map,上层随即整卷重格式化 → 单次瞬态毛刺即静默销毁
|
||||
* 全部用户数据。现把失败返回给 mount 层:f_mount 失败 →
|
||||
* defaultTask 自检上报 "filesystem fault" 并保留卷;瞬态故障
|
||||
* 由主循环重试/下次上电重新 resume;重格式化只走显式命令
|
||||
* (nand_ftl_format)。 */
|
||||
DBG_ERROR("Map resume failed (err=%d), volume kept, "
|
||||
"storage unavailable", err);
|
||||
return STA_NOINIT;
|
||||
}
|
||||
} else {
|
||||
DBG_INFO("Map resumed: %lu/%lu sectors used",
|
||||
dhara_map_size(&s_map), dhara_map_capacity(&s_map));
|
||||
|
||||
Reference in New Issue
Block a user