Fehlerbehandlung in Storport Miniport-Treibern

Jeder Storport-Miniporttreiber muss den Systemporttreiber über die folgenden Arten von SCSI-Fehlern benachrichtigen. Diese Fehler sollten im SrbStatus-Member festgelegt werden, bevor der Treiber den SRB abschließt, der beim Auftreten des Fehlers verarbeitet wurde:

  • SRB_STATUS_ERROR (wenn der HBA einen nicht spezifischen Busfehler zurückgibt)

  • 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 (wird auch bei Unterläufen zurückgegeben)

  • SRB_STATUS_PHASE_SEQUENCE_FAILURE

  • SRB_STATUS_BUSY (TID ausgelastet)

Bei einer Datenunterlaufausführung muss der Miniporttreiber die DataTransferLength des SRB aktualisieren, um anzugeben, wie viele Daten tatsächlich übertragen wurden.

Darüber hinaus sollte der Miniporttreiber die folgenden Richtlinien verwenden, um einige der vorherigen Fehler zu protokollieren, indem er den SRB an StorPortLogError übergibt:

Protokollieren Sie einen Fehler im Ermessen des Treiberschreibers für SRB_STATUS_ERROR.

Protokollieren Sie immer einen Fehler für SRB_STATUS_PARITY_ERROR.

Protokollieren Sie immer einen Fehler für SRB_STATUS_UNEXPECTED_BUS_FREE.

Protokollieren Sie immer einen Fehler für SRB_STATUS_SELECTION_TIMEOUT.

Protokollieren Sie immer einen Fehler für SRB_STATUS_COMMAND_TIMEOUT.

Protokollieren Sie einen Fehler für SRB_STATUS_DATA_OVERRUN, wenn ein Überlauf auftritt, aber nicht, wenn eine Unterausführung auftritt.

Protokollieren Sie immer einen Fehler für SRB_STATUS_PHASE_SEQUENCE_FAILURE.

Protokollieren Sie immer einen Fehler für SRB_STATUS_BUSY für Hardwarefehler.

Um einen Fehler zu protokollieren, ruft ein Miniporttreiber StorPortLogError mithilfe eines der folgenden systemdefinierten Fehler- oder Warnungscodes auf:

SP_BUS_PARITY_ERROR maps to SRB_STATUS_PARITY_ERROR

SP_UNEXPECTED_DISCONNECT (durch die logische Zieleinheit)

SP_INVALID_RESELECTION SRB_STATUS_PHASE_SEQUENCE_FAILURE oder SRB_STATUS_ERROR

SP_BUS_TIME_OUT maps to SRB_STATUS_SELECTION_TIMEOUT

SP_REQUEST_TIMEOUT maps to SRB_STATUS_COMMAND_TIMEOUT

SP_PROTOCOL_ERROR wird SRB_STATUS_PHASE_SELECTION_FAILURE, SRB_STATUS_UNEXPECTED_BUS_FREE oder SRB_STATUS_DATA_OVERRUN für eine Überschreitungsbedingung zugeordnet.

SP_INTERNAL_ADAPTER_ERROR maps to SRB_STATUS_ERROR

SP_IRQ_NOT_RESPONDING (Warnung, dass der Miniporttreiber erkannt hat, dass der HBA keine Interruptanforderungen mehr generiert)

SP_BAD_FW_ERROR, wobei FW firmware ist)

SP_BAD_FW_WARNING

StorPortLogError ordnet ein Fehlerprotokollpaket zu, richtet es ein und protokolliert den E/A-Fehler im Ereignisprotokoll im Namen des Miniporttreibers. Systemadministratoren oder Benutzer können den Zustand eines HBA überwachen, indem sie das Systemereignisprotokoll untersuchen und ggf. den HBA neu konfigurieren, reparieren oder ersetzen, bevor er fehlschlägt.