cidentifier
驱动牛犊
驱动牛犊
  • 注册日期2003-11-13
  • 最后登录2009-09-20
  • 粉丝1
  • 关注0
  • 积分1分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
20楼#
发布于:2004-08-23 14:23
问题是一旦出现bus reset,我还能恢复过来吗?
由于我做的是网络虚拟磁盘,保持响应时间在10ms之内对于网络来说不是那么容易保证的,比如服务器负载重,局域网网络负载重等情况,所以bus reset迟早会发生,这是一个不能回避的问题。

所以在一方面是提高响应时间,另一方面是在出现bus reset时怎样恢复过来,我注意到kangzh和terrychen做网络虚拟磁盘很长时间了,你们是怎样保持响应时间在10ms之内的,又是怎样从bus reset中恢复过来的呢?

??????

另外,bus reset时要求在HwScsiResetBus中完成所有的srb,而我在bus reset后利用!irpfind发现仍有未完成的irp(srb),显然我的HwScsiResetBus中的ScsiPortCompleteRequest调用并没有完成srb。于是我怀疑我是将在startio中将srb插入队列,交给一个内核线程来处理。在出现bus reset时,有可能线程正在处理该srb,这时HwScsiResetBus中该怎样完成srb呢?

办法一是让HwScsiResetBus和内核线程间有某种同步措施,同时只能有一方在处理srb。但HwScsiResetBus工作在dispatch_level,好像没法使用内核同步对象,即不能waitforxxxobject。

办法二是好像从外部杀掉内核线程,然后完成srb,但好像没有办法从外部杀掉一个内核线程。

我的分析有问题吗?真是痛苦啊!
control it, or forget it
kangzh
驱动小牛
驱动小牛
  • 注册日期2004-03-09
  • 最后登录2012-08-06
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望22点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
21楼#
发布于:2004-08-23 10:20
经常出现总线reset应该是在规定的时间内scsi没有反馈srb给os造成的,一般为10ms,如果及时反馈,应该不会出现这个问题.你在reset之后才反馈,应该已经timeout了
上一页 下一页
游客

返回顶部