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

scsi: qedf: Use same logic for SCSI host reset and FC lip_reset.

We should be using the same logic to do a soft reset of the FCoE function
whether it is initiated via sg_reset or the fc_host issue_lip attribute.
Refactor the host reset and fcoe reset handlers to use the preferred logic
which is currently contained in qedf_eh_host_reset().
Signed-off-by: default avatarChad Dupuis <chad.dupuis@cavium.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 2b82a62f
...@@ -640,27 +640,17 @@ void qedf_wait_for_upload(struct qedf_ctx *qedf) ...@@ -640,27 +640,17 @@ void qedf_wait_for_upload(struct qedf_ctx *qedf)
} }
} }
/* Reset the host by gracefully logging out and then logging back in */ /* Performs soft reset of qedf_ctx by simulating a link down/up */
static int qedf_eh_host_reset(struct scsi_cmnd *sc_cmd) static void qedf_ctx_soft_reset(struct fc_lport *lport)
{ {
struct fc_lport *lport;
struct qedf_ctx *qedf; struct qedf_ctx *qedf;
lport = shost_priv(sc_cmd->device->host);
if (lport->vport) { if (lport->vport) {
QEDF_ERR(NULL, "Cannot issue host reset on NPIV port.\n"); QEDF_ERR(NULL, "Cannot issue host reset on NPIV port.\n");
return SUCCESS; return;
} }
qedf = (struct qedf_ctx *)lport_priv(lport); qedf = lport_priv(lport);
if (atomic_read(&qedf->link_state) == QEDF_LINK_DOWN ||
test_bit(QEDF_UNLOADING, &qedf->flags) ||
test_bit(QEDF_DBG_STOP_IO, &qedf->flags))
return FAILED;
QEDF_ERR(&(qedf->dbg_ctx), "HOST RESET Issued...");
/* For host reset, essentially do a soft link up/down */ /* For host reset, essentially do a soft link up/down */
atomic_set(&qedf->link_state, QEDF_LINK_DOWN); atomic_set(&qedf->link_state, QEDF_LINK_DOWN);
...@@ -672,6 +662,24 @@ static int qedf_eh_host_reset(struct scsi_cmnd *sc_cmd) ...@@ -672,6 +662,24 @@ static int qedf_eh_host_reset(struct scsi_cmnd *sc_cmd)
qedf->vlan_id = 0; qedf->vlan_id = 0;
queue_delayed_work(qedf->link_update_wq, &qedf->link_update, queue_delayed_work(qedf->link_update_wq, &qedf->link_update,
0); 0);
}
/* Reset the host by gracefully logging out and then logging back in */
static int qedf_eh_host_reset(struct scsi_cmnd *sc_cmd)
{
struct fc_lport *lport;
struct qedf_ctx *qedf;
lport = shost_priv(sc_cmd->device->host);
qedf = lport_priv(lport);
if (atomic_read(&qedf->link_state) == QEDF_LINK_DOWN ||
test_bit(QEDF_UNLOADING, &qedf->flags))
return FAILED;
QEDF_ERR(&(qedf->dbg_ctx), "HOST RESET Issued...");
qedf_ctx_soft_reset(lport);
return SUCCESS; return SUCCESS;
} }
...@@ -1669,8 +1677,7 @@ static int qedf_fcoe_reset(struct Scsi_Host *shost) ...@@ -1669,8 +1677,7 @@ static int qedf_fcoe_reset(struct Scsi_Host *shost)
{ {
struct fc_lport *lport = shost_priv(shost); struct fc_lport *lport = shost_priv(shost);
fc_fabric_logoff(lport); qedf_ctx_soft_reset(lport);
fc_fabric_login(lport);
return 0; return 0;
} }
......
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