snic: LUN goes offline due to scsi cmd timeouts

- LUN goes offline if there are at least two scsi command timeouts
  Completing the IO with scsi_done() fixes the issue.

Signed-off-by: Narsimhulu Musini <nmusini@cisco.com>
Signed-off-by: Sesidhar Baddela <sebaddel@cisco.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
Narsimhulu Musini 2016-03-17 00:51:11 -07:00 committed by Martin K. Petersen
parent 3f5c11a463
commit f352a0d5ba
1 changed files with 18 additions and 0 deletions

View File

@ -1465,11 +1465,19 @@ snic_abort_finish(struct snic *snic, struct scsi_cmnd *sc)
case SNIC_STAT_IO_SUCCESS:
case SNIC_STAT_IO_NOT_FOUND:
ret = SUCCESS;
/*
* If abort path doesn't call scsi_done(),
* the # IO timeouts == 2, will cause the LUN offline.
* Call scsi_done to complete the IO.
*/
sc->result = (DID_ERROR << 16);
sc->scsi_done(sc);
break;
default:
/* Firmware completed abort with error */
ret = FAILED;
rqi = NULL;
break;
}
@ -1842,6 +1850,9 @@ snic_dr_clean_single_req(struct snic *snic,
snic_release_req_buf(snic, rqi, sc);
sc->result = (DID_ERROR << 16);
sc->scsi_done(sc);
ret = 0;
return ret;
@ -2396,6 +2407,13 @@ snic_cmpl_pending_tmreq(struct snic *snic, struct scsi_cmnd *sc)
"Completing Pending TM Req sc %p, state %s flags 0x%llx\n",
sc, snic_io_status_to_str(CMD_STATE(sc)), CMD_FLAGS(sc));
/*
* CASE : FW didn't post itmf completion due to PCIe Errors.
* Marking the abort status as Success to call scsi completion
* in snic_abort_finish()
*/
CMD_ABTS_STATUS(sc) = SNIC_STAT_IO_SUCCESS;
rqi = (struct snic_req_info *) CMD_SP(sc);
if (!rqi)
return;