scsi: fnic: Do not call 'scsi_done()' for unhandled commands
authorHannes Reinecke <hare@suse.com>
Fri, 15 May 2020 11:26:47 +0000 (13:26 +0200)
committerMartin K. Petersen <martin.petersen@oracle.com>
Sat, 3 Oct 2020 01:09:26 +0000 (21:09 -0400)
The fnic drivers assigns an ioreq structure to each command and severs this
assignment once scsi_done() has been called and the command has been
completed.

When traversing commands to terminate outstanding I/O we should not call
scsi_done() on commands which do not have a corresponding ioreq structure;
these commands have either never entered the driver or have already been
completed.

[mkp: fixed unused label warning]

Link: https://lore.kernel.org/r/20200515112647.49260-1-hare@suse.de
Reported-by: kbuild test robot <lkp@intel.com>
Reviewed-by: Laurence Oberman <loberman@redhat.com>
Acked-by: Satish Kharat <satishkh@cisco.com>
Acked-by: Karan Tilak Kumar <kartilak@cisco.com>
Signed-off-by: Hannes Reinecke <hare@suse.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/fnic/fnic_scsi.c

index 03b1805b106c6558b07b5efa32aaad7590a4d6f6..d1f7b84bbfe86c318cc694e4f6c0dc2e919f0515 100644 (file)
@@ -1402,7 +1402,7 @@ static void fnic_cleanup_io(struct fnic *fnic, int exclude_id)
                }
                if (!io_req) {
                        spin_unlock_irqrestore(io_lock, flags);
-                       goto cleanup_scsi_cmd;
+                       continue;
                }
 
                CMD_SP(sc) = NULL;
@@ -1417,7 +1417,6 @@ static void fnic_cleanup_io(struct fnic *fnic, int exclude_id)
                fnic_release_ioreq_buf(fnic, io_req, sc);
                mempool_free(io_req, fnic->io_req_pool);
 
-cleanup_scsi_cmd:
                sc->result = DID_TRANSPORT_DISRUPTED << 16;
                FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
                              "%s: tag:0x%x : sc:0x%p duration = %lu DID_TRANSPORT_DISRUPTED\n",