scsi: mpi3mr: Don't reset IOC if cmnds flush with reset status
authorSreekanth Reddy <sreekanth.reddy@broadcom.com>
Mon, 20 Dec 2021 14:11:37 +0000 (19:41 +0530)
committerMartin K. Petersen <martin.petersen@oracle.com>
Thu, 23 Dec 2021 05:04:21 +0000 (00:04 -0500)
Don't issue the soft reset if internal commands are flushed out with reset
status. Soft reset needs to be issued only if commands are really timed
out.

Link: https://lore.kernel.org/r/20211220141159.16117-4-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_fw.c
drivers/scsi/mpi3mr/mpi3mr_os.c

index 61dcacd..4ce79d7 100644 (file)
@@ -1947,8 +1947,9 @@ static int mpi3mr_sync_timestamp(struct mpi3mr_ioc *mrioc)
        if (!(mrioc->init_cmds.state & MPI3MR_CMD_COMPLETE)) {
                ioc_err(mrioc, "Issue IOUCTL time_stamp: command timed out\n");
                mrioc->init_cmds.is_waiting = 0;
-               mpi3mr_soft_reset_handler(mrioc,
-                   MPI3MR_RESET_FROM_TSU_TIMEOUT, 1);
+               if (!(mrioc->init_cmds.state & MPI3MR_CMD_RESET))
+                       mpi3mr_soft_reset_handler(mrioc,
+                           MPI3MR_RESET_FROM_TSU_TIMEOUT, 1);
                retval = -1;
                goto out_unlock;
        }
@@ -2827,8 +2828,9 @@ int mpi3mr_send_event_ack(struct mpi3mr_ioc *mrioc, u8 event,
            (MPI3MR_INTADMCMD_TIMEOUT * HZ));
        if (!(mrioc->init_cmds.state & MPI3MR_CMD_COMPLETE)) {
                ioc_err(mrioc, "Issue EvtNotify: command timed out\n");
-               mpi3mr_soft_reset_handler(mrioc,
-                   MPI3MR_RESET_FROM_EVTACK_TIMEOUT, 1);
+               if (!(mrioc->init_cmds.state & MPI3MR_CMD_RESET))
+                       mpi3mr_soft_reset_handler(mrioc,
+                           MPI3MR_RESET_FROM_EVTACK_TIMEOUT, 1);
                retval = -1;
                goto out_unlock;
        }
index fe10f25..ce75503 100644 (file)
@@ -2659,8 +2659,9 @@ static int mpi3mr_issue_tm(struct mpi3mr_ioc *mrioc, u8 tm_type,
                ioc_err(mrioc, "%s :Issue TM: command timed out\n", __func__);
                drv_cmd->is_waiting = 0;
                retval = -1;
-               mpi3mr_soft_reset_handler(mrioc,
-                   MPI3MR_RESET_FROM_TM_TIMEOUT, 1);
+               if (!(drv_cmd->state & MPI3MR_CMD_RESET))
+                       mpi3mr_soft_reset_handler(mrioc,
+                           MPI3MR_RESET_FROM_TM_TIMEOUT, 1);
                goto out_unlock;
        }