Commit a8fdfb0b authored by Quinn Tran's avatar Quinn Tran Committed by Martin K. Petersen
Browse files

scsi: qla2xxx: edif: Fix session thrash

Current code prematurely sends out PRLI before authentication application
has given the OK to do so. This causes PRLI failure and session teardown.

Prevents PRLI from going out before authentication app gives the OK.

Link: https://lore.kernel.org/r/20220608115849.16693-7-njavali@marvell.com


Fixes: 91f6f5fb ("scsi: qla2xxx: edif: Reduce connection thrash")
Reviewed-by: default avatarHimanshu Madhani <himanshu.madhani@oracle.com>
Signed-off-by: default avatarQuinn Tran <qutran@marvell.com>
Signed-off-by: default avatarNilesh Javali <njavali@marvell.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent d7e2e4a6
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -3517,7 +3517,7 @@ int qla_edif_process_els(scsi_qla_host_t *vha, struct bsg_job *bsg_job)
	if (qla_bsg_check(vha, bsg_job, fcport))
		return 0;

	if (fcport->loop_id == FC_NO_LOOP_ID) {
	if (EDIF_SESS_DELETE(fcport)) {
		ql_dbg(ql_dbg_edif, vha, 0x910d,
		    "%s ELS code %x, no loop id.\n", __func__,
		    bsg_request->rqst_data.r_els.els_code);
+4 −0
Original line number Diff line number Diff line
@@ -141,4 +141,8 @@ struct enode {
	(DBELL_ACTIVE(_fcport->vha) && \
	 (_fcport->disc_state == DSC_LOGIN_AUTH_PEND))

#define EDIF_SESS_DELETE(_s) \
	(qla_ini_mode_enabled(_s->vha) && (_s->disc_state == DSC_DELETE_PEND || \
	 _s->disc_state == DSC_DELETED))

#endif	/* __QLA_EDIF_H */
+9 −1
Original line number Diff line number Diff line
@@ -1762,8 +1762,16 @@ int qla24xx_fcport_handle_login(struct scsi_qla_host *vha, fc_port_t *fcport)
		break;

	case DSC_LOGIN_PEND:
		if (fcport->fw_login_state == DSC_LS_PLOGI_COMP)
		if (vha->hw->flags.edif_enabled)
			break;

		if (fcport->fw_login_state == DSC_LS_PLOGI_COMP) {
			ql_dbg(ql_dbg_disc, vha, 0x2118,
			       "%s %d %8phC post %s PRLI\n",
			       __func__, __LINE__, fcport->port_name,
			       NVME_TARGET(vha->hw, fcport) ? "NVME" : "FC");
			qla24xx_post_prli_work(vha, fcport);
		}
		break;

	case DSC_UPD_FCPORT: