Commit b09fdc3a authored by Chad Dupuis's avatar Chad Dupuis Committed by Martin K. Petersen

scsi: qedf: Add bus_reset No-op.

We need to add a bus reset no-op as without it some of the LUNs attached to a
vport may go offline when the error handler escalates to host reset due to not
having a bus reset handler in the driver. What happens is we escalate to host
reset which does a soft link down/link up to reset the adapter. However with
multiple vports attached it's been observed that if the vports do log back into
the target within 5 seconds, the SCSI layer offlines the devices most likely
due to a TUR timing out to verify that the device is online. Adding a bus
reset handler will cause the TUR to be sent after the bus reset handler where
the devices will still be online if the bus reset is initiated by sg_reset
(which is the case in the test that was failing). The bus reset will succeed
and not needlessly bring the device offline/online.
Signed-off-by: default avatarChad Dupuis <chad.dupuis@cavium.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 5cf446d2
...@@ -628,6 +628,16 @@ static int qedf_eh_device_reset(struct scsi_cmnd *sc_cmd) ...@@ -628,6 +628,16 @@ static int qedf_eh_device_reset(struct scsi_cmnd *sc_cmd)
return qedf_initiate_tmf(sc_cmd, FCP_TMF_LUN_RESET); return qedf_initiate_tmf(sc_cmd, FCP_TMF_LUN_RESET);
} }
static int qedf_eh_bus_reset(struct scsi_cmnd *sc_cmd)
{
QEDF_ERR(NULL, "BUS RESET Issued...\n");
/*
* Essentially a no-op but return SUCCESS to prevent
* unnecessary escalation to the host reset handler.
*/
return SUCCESS;
}
void qedf_wait_for_upload(struct qedf_ctx *qedf) void qedf_wait_for_upload(struct qedf_ctx *qedf)
{ {
while (1) { while (1) {
...@@ -705,6 +715,7 @@ static struct scsi_host_template qedf_host_template = { ...@@ -705,6 +715,7 @@ static struct scsi_host_template qedf_host_template = {
.eh_abort_handler = qedf_eh_abort, .eh_abort_handler = qedf_eh_abort,
.eh_device_reset_handler = qedf_eh_device_reset, /* lun reset */ .eh_device_reset_handler = qedf_eh_device_reset, /* lun reset */
.eh_target_reset_handler = qedf_eh_target_reset, /* target reset */ .eh_target_reset_handler = qedf_eh_target_reset, /* target reset */
.eh_bus_reset_handler = qedf_eh_bus_reset,
.eh_host_reset_handler = qedf_eh_host_reset, .eh_host_reset_handler = qedf_eh_host_reset,
.slave_configure = qedf_slave_configure, .slave_configure = qedf_slave_configure,
.dma_boundary = QED_HW_DMA_BOUNDARY, .dma_boundary = QED_HW_DMA_BOUNDARY,
......
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