存储Controller对象无法正常卸载问题分析
更新时间: 2026/05/26
在Gitcode上查看源码问题背景
- 单板类型:自研板;
- 软件版本:openUBMC 2512 LTS SP1;
- 涉及功能:raid卡识别;
- 触发条件:插上raid卡后再拔掉raid卡;
- 业务表现:预期controller对象正常卸载,web页面不显示已经拔掉的raid卡;实际controller对象卸载失败,web页面会显示已经拔掉的raid卡。
问题复现步骤
环境插上raid卡,拔掉raid卡后,发现拔掉的raid卡在web界面仍然有显示。
关键日志信息
web页面如下图:
app.log日志截图如下:
定位过程
app.log日志分析,在尝试删除Controller对象时,storage组件代码试图访问一个为nil的变量controller,导致删除过程异常中断;代码截图如下: 问题出在最后一行使用的变量obj,实际上obj参数非入参,非函数自行定义的变量,但函数参数为controller,因此obj是未定义变量(nil),导致运行时报错;
问题原因
storage组件中的raid对象卸载函数执行过程中使用了未定义的变量,导致raid卡的Controller对象卸载失败。
解决方案
文件路径:storage\src\lualib\controller\controller_collection.lua 代码修改如下:
text
c_controller.on_delete_object:on(function(controller)
self.controller_list[controller.Id] = nil
c_storageconfig.get_instance():add_or_del_controller(controller, nil)
self:link_interface(controller, false)
end)即最后一行的第一个入参从obj改为controller,保证函数不会传入nil的参数。