Do not return SCSI_MLQUEUE_HOST_BUSY, but send DID_ERROR to SCSI mid-layer, if 
adapter is in critical error state.
"SCSI_MLQUEUE_HOST_BUSY" will keep same SCSI command in loop and it is not a 
right return value,
if controller is hardware critical error.

Signed-off-by: Sumit Saxena <sumit.sax...@lsi.com>
Signed-off-by: Kashyap Desai <kashyap.de...@lsi.com>
---
diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c 
b/drivers/scsi/megaraid/megaraid_sas_base.c
index 9d53540..758ea2e 100644
--- a/drivers/scsi/megaraid/megaraid_sas_base.c
+++ b/drivers/scsi/megaraid/megaraid_sas_base.c
@@ -1471,6 +1471,14 @@ megasas_queue_command_lck(struct scsi_cmnd *scmd, void 
(*done) (struct scsi_cmnd
                return SCSI_MLQUEUE_HOST_BUSY;
 
        spin_lock_irqsave(&instance->hba_lock, flags);
+
+       if (instance->adprecovery == MEGASAS_HW_CRITICAL_ERROR) {
+               spin_unlock_irqrestore(&instance->hba_lock, flags);
+               scmd->result = DID_ERROR << 16;
+               done(scmd);
+               return 0;
+       }
+
        if (instance->adprecovery != MEGASAS_HBA_OPERATIONAL) {
                spin_unlock_irqrestore(&instance->hba_lock, flags);
                return SCSI_MLQUEUE_HOST_BUSY;

--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to