Tratamento de erro em drivers de miniport do Storport

Cada driver de miniport do Storport deve notificar o driver de porta do sistema sobre os seguintes tipos de erros SCSI. Esses erros devem ser definidos no membro SrbStatus antes que o driver conclua o SRB que estava processando quando o erro ocorreu:

  • SRB_STATUS_ERROR (se o HBA retornar um erro de barramento não específico)

  • 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 (também retornado para subruns)

  • SRB_STATUS_PHASE_SEQUENCE_FAILURE

  • SRB_STATUS_BUSY (TID ocupado)

Para uma sub-transmissão de dados, o driver de miniporte deve atualizar o DataTransferLength do SRB para indicar quantos dados realmente foram transferidos.

Além disso, o driver de miniporte deve usar as seguintes diretrizes para registrar alguns dos erros anteriores passando o SRB para StorPortLogError:

Registre um erro a critério do driver writer para SRB_STATUS_ERROR.

Sempre registre um erro para SRB_STATUS_PARITY_ERROR.

Sempre registre um erro para SRB_STATUS_UNEXPECTED_BUS_FREE.

Sempre registre um erro para SRB_STATUS_SELECTION_TIMEOUT.

Sempre registre um erro para SRB_STATUS_COMMAND_TIMEOUT.

Registre um erro para SRB_STATUS_DATA_OVERRUN sempre que ocorrer um estouros, mas não quando ocorrer um estouros.

Sempre registre um erro para SRB_STATUS_PHASE_SEQUENCE_FAILURE.

Sempre registre um erro para SRB_STATUS_BUSY erros de hardware.

Para registrar um erro, um driver de miniporte chama StorPortLogError usando um dos seguintes códigos de aviso ou erro definidos pelo sistema:

SP_BUS_PARITY_ERROR mapeia para SRB_STATUS_PARITY_ERROR

SP_UNEXPECTED_DISCONNECT (pela unidade lógica de destino)

SP_INVALID_RESELECTION mapeia para SRB_STATUS_PHASE_SEQUENCE_FAILURE ou SRB_STATUS_ERROR

SP_BUS_TIME_OUT mapeia para SRB_STATUS_SELECTION_TIMEOUT

SP_REQUEST_TIMEOUT mapeia para SRB_STATUS_COMMAND_TIMEOUT

SP_PROTOCOL_ERROR mapeia para SRB_STATUS_PHASE_SELECTION_FAILURE, SRB_STATUS_UNEXPECTED_BUS_FREE ou SRB_STATUS_DATA_OVERRUN para uma condição de superação

SP_INTERNAL_ADAPTER_ERROR mapeia para SRB_STATUS_ERROR

SP_IRQ_NOT_RESPONDING (aviso de que o driver de miniporte detectou que o HBA não está mais gerando solicitações de interrupção)

SP_BAD_FW_ERROR em que FW é firmware)

SP_BAD_FW_WARNING

StorPortLogError aloca um pacote de log de erros, configura-o e registra o erro de E/S no log de eventos em nome do driver de miniporte. Os administradores ou usuários do sistema podem monitorar a condição de um HBA examinando o log de eventos do sistema e, se necessário, reconfigurando, reparando ou substituindo o HBA antes de falhar.