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.