Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+4 −0
Original line number Original line Diff line number Diff line
@@ -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)
		 * 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)
	 * 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);
+0 −6
Original line number Original line Diff line number Diff line
@@ -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)
	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)


	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)