Commit 02552e89 authored by Saurav Kashyap's avatar Saurav Kashyap Committed by Sasha Levin

qla2xxx: Mark port lost when we receive an RSCN for it.

[ Upstream commit ef86cb20 ]
Signed-off-by: default avatarChad Dupuis <chad.dupuis@qlogic.com>
Signed-off-by: default avatarSaurav Kashyap <saurav.kashyap@qlogic.com>
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
parent 547a00fa
...@@ -2878,6 +2878,7 @@ qla2x00_rport_del(void *data) ...@@ -2878,6 +2878,7 @@ qla2x00_rport_del(void *data)
struct fc_rport *rport; struct fc_rport *rport;
scsi_qla_host_t *vha = fcport->vha; scsi_qla_host_t *vha = fcport->vha;
unsigned long flags; unsigned long flags;
unsigned long vha_flags;
spin_lock_irqsave(fcport->vha->host->host_lock, flags); spin_lock_irqsave(fcport->vha->host->host_lock, flags);
rport = fcport->drport ? fcport->drport: fcport->rport; rport = fcport->drport ? fcport->drport: fcport->rport;
...@@ -2889,7 +2890,9 @@ qla2x00_rport_del(void *data) ...@@ -2889,7 +2890,9 @@ qla2x00_rport_del(void *data)
* Release the target mode FC NEXUS in qla_target.c code * Release the target mode FC NEXUS in qla_target.c code
* if target mod is enabled. * if target mod is enabled.
*/ */
spin_lock_irqsave(&vha->hw->hardware_lock, vha_flags);
qlt_fc_port_deleted(vha, fcport); qlt_fc_port_deleted(vha, fcport);
spin_unlock_irqrestore(&vha->hw->hardware_lock, vha_flags);
} }
} }
...@@ -3259,6 +3262,7 @@ qla2x00_reg_remote_port(scsi_qla_host_t *vha, fc_port_t *fcport) ...@@ -3259,6 +3262,7 @@ qla2x00_reg_remote_port(scsi_qla_host_t *vha, fc_port_t *fcport)
* Create target mode FC NEXUS in qla_target.c if target mode is * Create target mode FC NEXUS in qla_target.c if target mode is
* enabled.. * enabled..
*/ */
qlt_fc_port_added(vha, fcport); qlt_fc_port_added(vha, fcport);
spin_lock_irqsave(fcport->vha->host->host_lock, flags); spin_lock_irqsave(fcport->vha->host->host_lock, flags);
......
...@@ -876,10 +876,8 @@ void qlt_fc_port_added(struct scsi_qla_host *vha, fc_port_t *fcport) ...@@ -876,10 +876,8 @@ void qlt_fc_port_added(struct scsi_qla_host *vha, fc_port_t *fcport)
void qlt_fc_port_deleted(struct scsi_qla_host *vha, fc_port_t *fcport) void qlt_fc_port_deleted(struct scsi_qla_host *vha, fc_port_t *fcport)
{ {
struct qla_hw_data *ha = vha->hw;
struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; struct qla_tgt *tgt = vha->vha_tgt.qla_tgt;
struct qla_tgt_sess *sess; struct qla_tgt_sess *sess;
unsigned long flags;
if (!vha->hw->tgt.tgt_ops) if (!vha->hw->tgt.tgt_ops)
return; return;
...@@ -887,14 +885,11 @@ void qlt_fc_port_deleted(struct scsi_qla_host *vha, fc_port_t *fcport) ...@@ -887,14 +885,11 @@ void qlt_fc_port_deleted(struct scsi_qla_host *vha, fc_port_t *fcport)
if (!tgt) if (!tgt)
return; return;
spin_lock_irqsave(&ha->hardware_lock, flags);
if (tgt->tgt_stop) { if (tgt->tgt_stop) {
spin_unlock_irqrestore(&ha->hardware_lock, flags);
return; return;
} }
sess = qlt_find_sess_by_port_name(tgt, fcport->port_name); sess = qlt_find_sess_by_port_name(tgt, fcport->port_name);
if (!sess) { if (!sess) {
spin_unlock_irqrestore(&ha->hardware_lock, flags);
return; return;
} }
...@@ -902,7 +897,6 @@ void qlt_fc_port_deleted(struct scsi_qla_host *vha, fc_port_t *fcport) ...@@ -902,7 +897,6 @@ void qlt_fc_port_deleted(struct scsi_qla_host *vha, fc_port_t *fcport)
sess->local = 1; sess->local = 1;
qlt_schedule_sess_for_deletion(sess, false); qlt_schedule_sess_for_deletion(sess, false);
spin_unlock_irqrestore(&ha->hardware_lock, flags);
} }
static inline int test_tgt_sess_count(struct qla_tgt *tgt) static inline int test_tgt_sess_count(struct qla_tgt *tgt)
......
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