Storport 微型端口驱动程序中的错误处理

每个 Storport 微型端口驱动程序必须通知系统端口驱动程序以下类型的 SCSI 错误。 应在 SrbStatus 成员中设置这些错误,然后驱动程序才能完成发生错误时正在处理的 SRB:

  • 如果 HBA 返回非特定总线错误,则 SRB_STATUS_ERROR ()

  • SRB_STATUS_PARITY_ERROR

  • SRB_STATUS_UNEXPECTED_BUS_FREE

  • SRB_STATUS_SELECTION_TIMEOUT

  • SRB_STATUS_COMMAND_TIMEOUT

  • SRB_STATUS_MESSAGE_REJECTED

  • SRB_STATUS_NO_DEVICE

  • SRB_STATUS_NO_HBA

  • 还为不足返回 SRB_STATUS_DATA_OVERRUN ()

  • SRB_STATUS_PHASE_SEQUENCE_FAILURE

  • SRB_STATUS_BUSY (TID 繁忙)

对于数据不足,微型端口驱动程序必须更新 SRB 的 DataTransferLength ,以指示实际传输的数据量。

此外,小型端口驱动程序应使用以下准则来记录前面的一些错误,方法是将 SRB 传递到 StorPortLogError

记录 SRB_STATUS_ERROR 的驱动程序编写器的错误。

对于 SRB_STATUS_PARITY_ERROR 始终记录错误。

对于 SRB_STATUS_UNEXPECTED_BUS_FREE 始终记录错误。

对于 SRB_STATUS_SELECTION_TIMEOUT 始终记录错误。

对于 SRB_STATUS_COMMAND_TIMEOUT 始终记录错误。

在发生溢出时,记录 SRB_STATUS_DATA_OVERRUN 的错误,但不记录发生不足的情况。

对于 SRB_STATUS_PHASE_SEQUENCE_FAILURE 始终记录错误。

对于硬件错误 SRB_STATUS_BUSY 始终记录错误。

若要记录错误,微型端口驱动程序使用以下系统定义的错误或警告代码之一调用 StorPortLogError

SP_BUS_PARITY_ERROR 映射到 SRB_STATUS_PARITY_ERROR

目标逻辑单元 (SP_UNEXPECTED_DISCONNECT)

SP_INVALID_RESELECTION 映射到 SRB_STATUS_PHASE_SEQUENCE_FAILURE 或 SRB_STATUS_ERROR

SP_BUS_TIME_OUT 映射到 SRB_STATUS_SELECTION_TIMEOUT

SP_REQUEST_TIMEOUT 映射到 SRB_STATUS_COMMAND_TIMEOUT

SP_PROTOCOL_ERROR 映射到溢出条件 SRB_STATUS_PHASE_SELECTION_FAILURE、SRB_STATUS_UNEXPECTED_BUS_FREE 或 SRB_STATUS_DATA_OVERRUN

SP_INTERNAL_ADAPTER_ERROR 映射到 SRB_STATUS_ERROR

SP_IRQ_NOT_RESPONDING (警告:微型端口驱动程序已检测到 HBA 不再生成中断请求)

SP_BAD_FW_ERROR,其中 FW 是 固件)

SP_BAD_FW_WARNING

StorPortLogError 分配错误日志数据包,对其进行设置,并在代表微型端口驱动程序的事件日志中记录 i/o 错误。 系统管理员或用户可以通过检查系统事件日志,并在必要时重新配置、修复或更换 HBA 来监视 HBA 的状况。