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

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

  • SRB_STATUS_ERROR (HBA 是否返回非特定总线错误)

  • 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 不再生成中断请求)

FW 是 固件) 的SP_BAD_FW_ERROR

SP_BAD_FW_WARNING

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