scsi: mpi3mr: Return I/Os to an unrecoverable HBA with DID_ERROR
authorSreekanth Reddy <sreekanth.reddy@broadcom.com>
Thu, 5 May 2022 18:48:06 +0000 (00:18 +0530)
committerMartin K. Petersen <martin.petersen@oracle.com>
Wed, 11 May 2022 02:28:21 +0000 (22:28 -0400)
Complete all new I/O requests issued to an unrecoverable controller with
DID_ERROR status instead of returning the I/O requests with
SCSI_MLQUEUE_HOST_BUSY. This will prevent the infinite retries of the new
I/Os when a controller is in an unrecoverable state.

Link: https://lore.kernel.org/r/20220505184808.24049-1-sreekanth.reddy@broadcom.com
Signed-off-by: Sreekanth Reddy <sreekanth.reddy@broadcom.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/mpi3mr/mpi3mr_os.c

index 70da6d8..f5c345d 100644 (file)
@@ -4002,6 +4002,12 @@ static int mpi3mr_qcmd(struct Scsi_Host *shost,
        int iprio_class;
        u8 is_pcie_dev = 0;
 
+       if (mrioc->unrecoverable) {
+               scmd->result = DID_ERROR << 16;
+               scsi_done(scmd);
+               goto out;
+       }
+
        sdev_priv_data = scmd->device->hostdata;
        if (!sdev_priv_data || !sdev_priv_data->tgt_priv_data) {
                scmd->result = DID_NO_CONNECT << 16;