scsi: fnic: Do not call 'scsi_done()' for unhandled commands
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>
This commit is contained in:
parent
6500251e59
commit
712582e60f
|
@ -1402,7 +1402,7 @@ static void fnic_cleanup_io(struct fnic *fnic, int exclude_id)
|
||||||
}
|
}
|
||||||
if (!io_req) {
|
if (!io_req) {
|
||||||
spin_unlock_irqrestore(io_lock, flags);
|
spin_unlock_irqrestore(io_lock, flags);
|
||||||
goto cleanup_scsi_cmd;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
CMD_SP(sc) = NULL;
|
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);
|
fnic_release_ioreq_buf(fnic, io_req, sc);
|
||||||
mempool_free(io_req, fnic->io_req_pool);
|
mempool_free(io_req, fnic->io_req_pool);
|
||||||
|
|
||||||
cleanup_scsi_cmd:
|
|
||||||
sc->result = DID_TRANSPORT_DISRUPTED << 16;
|
sc->result = DID_TRANSPORT_DISRUPTED << 16;
|
||||||
FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
|
FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
|
||||||
"%s: tag:0x%x : sc:0x%p duration = %lu DID_TRANSPORT_DISRUPTED\n",
|
"%s: tag:0x%x : sc:0x%p duration = %lu DID_TRANSPORT_DISRUPTED\n",
|
||||||
|
|
Loading…
Reference in New Issue