scsi: mpi3mr: Block PEL Enable Command on Controller Reset and Unrecoverable State
authorChandrakanth patil <chandrakanth.patil@broadcom.com>
Sun, 26 Nov 2023 05:31:33 +0000 (11:01 +0530)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 25 Jan 2024 23:35:45 +0000 (15:35 -0800)
commit f8fb3f39148e8010479e4b2003ba4728818ec661 upstream.

If a controller reset is underway or the controller is in an unrecoverable
state, the PEL enable management command will be returned as EAGAIN or
EFAULT.

Cc: <stable@vger.kernel.org> # v6.1+
Co-developed-by: Sathya Prakash <sathya.prakash@broadcom.com>
Signed-off-by: Sathya Prakash <sathya.prakash@broadcom.com>
Signed-off-by: Chandrakanth patil <chandrakanth.patil@broadcom.com>
Link: https://lore.kernel.org/r/20231126053134.10133-4-chandrakanth.patil@broadcom.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/scsi/mpi3mr/mpi3mr_app.c

index 08645a9..9dacbb8 100644 (file)
@@ -223,6 +223,22 @@ static long mpi3mr_bsg_pel_enable(struct mpi3mr_ioc *mrioc,
                return rval;
        }
 
+       if (mrioc->unrecoverable) {
+               dprint_bsg_err(mrioc, "%s: unrecoverable controller\n",
+                              __func__);
+               return -EFAULT;
+       }
+
+       if (mrioc->reset_in_progress) {
+               dprint_bsg_err(mrioc, "%s: reset in progress\n", __func__);
+               return -EAGAIN;
+       }
+
+       if (mrioc->stop_bsgs) {
+               dprint_bsg_err(mrioc, "%s: bsgs are blocked\n", __func__);
+               return -EAGAIN;
+       }
+
        sg_copy_to_buffer(job->request_payload.sg_list,
                          job->request_payload.sg_cnt,
                          &pel_enable, sizeof(pel_enable));