Commit f352a0d5 authored by Narsimhulu Musini's avatar Narsimhulu Musini Committed by Martin K. Petersen

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: default avatarNarsimhulu Musini <nmusini@cisco.com>
Signed-off-by: default avatarSesidhar Baddela <sebaddel@cisco.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 3f5c11a4
...@@ -1465,11 +1465,19 @@ snic_abort_finish(struct snic *snic, struct scsi_cmnd *sc) ...@@ -1465,11 +1465,19 @@ snic_abort_finish(struct snic *snic, struct scsi_cmnd *sc)
case SNIC_STAT_IO_SUCCESS: case SNIC_STAT_IO_SUCCESS:
case SNIC_STAT_IO_NOT_FOUND: case SNIC_STAT_IO_NOT_FOUND:
ret = SUCCESS; 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; break;
default: default:
/* Firmware completed abort with error */ /* Firmware completed abort with error */
ret = FAILED; ret = FAILED;
rqi = NULL;
break; break;
} }
...@@ -1842,6 +1850,9 @@ snic_dr_clean_single_req(struct snic *snic, ...@@ -1842,6 +1850,9 @@ snic_dr_clean_single_req(struct snic *snic,
snic_release_req_buf(snic, rqi, sc); snic_release_req_buf(snic, rqi, sc);
sc->result = (DID_ERROR << 16);
sc->scsi_done(sc);
ret = 0; ret = 0;
return ret; return ret;
...@@ -2396,6 +2407,13 @@ snic_cmpl_pending_tmreq(struct snic *snic, struct scsi_cmnd *sc) ...@@ -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", "Completing Pending TM Req sc %p, state %s flags 0x%llx\n",
sc, snic_io_status_to_str(CMD_STATE(sc)), CMD_FLAGS(sc)); 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); rqi = (struct snic_req_info *) CMD_SP(sc);
if (!rqi) if (!rqi)
return; return;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment