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

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

scsi: qla2xxx: Delay loop id allocation at login



Delay loop id allocation to login time

Signed-off-by: default avatarQuinn Tran <quinn.tran@cavium.com>
Signed-off-by: default avatarHimanshu Madhani <himanshu.madhani@cavium.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 604e2e57
Loading
Loading
Loading
Loading
+35 −29
Original line number Diff line number Diff line
@@ -580,10 +580,6 @@ static void qla24xx_handle_gnl_done_event(scsi_qla_host_t *vha,

	if (!found) {
		/* fw has no record of this port */
		if (fcport->loop_id == FC_NO_LOOP_ID) {
			qla2x00_find_new_loop_id(vha, fcport);
			fcport->fw_login_state = DSC_LS_PORT_UNAVAIL;
		} else {
		for (i = 0; i < n; i++) {
			e = &vha->gnl.l[i];
			id.b.domain = e->port_id[0];
@@ -596,7 +592,6 @@ static void qla24xx_handle_gnl_done_event(scsi_qla_host_t *vha,
				conflict_fcport =
					qla2x00_find_fcport_by_wwpn(vha,
					    e->port_name, 0);

				ql_dbg(ql_dbg_disc, vha, 0x20e6,
				    "%s %d %8phC post del sess\n",
				    __func__, __LINE__,
@@ -605,11 +600,9 @@ static void qla24xx_handle_gnl_done_event(scsi_qla_host_t *vha,
					(conflict_fcport, 1);
			}

				if (fcport->loop_id == loop_id) {
			/* FW already picked this loop id for another fcport */
					qla2x00_find_new_loop_id(vha, fcport);
				}
			}
			if (fcport->loop_id == loop_id)
				fcport->loop_id = FC_NO_LOOP_ID;
		}
		qla24xx_fcport_handle_login(vha, fcport);
	}
@@ -1104,6 +1097,7 @@ void qla24xx_handle_gpdb_event(scsi_qla_host_t *vha, struct event_arg *ea)
static void qla_chk_n2n_b4_login(struct scsi_qla_host *vha, fc_port_t *fcport)
{
	u8 login = 0;
	int rc;

	if (qla_tgt_mode_enabled(vha))
		return;
@@ -1129,6 +1123,18 @@ static void qla_chk_n2n_b4_login(struct scsi_qla_host *vha, fc_port_t *fcport)
	}

	if (login) {
		if (fcport->loop_id == FC_NO_LOOP_ID) {
			fcport->fw_login_state = DSC_LS_PORT_UNAVAIL;
			rc = qla2x00_find_new_loop_id(vha, fcport);
			if (rc) {
				ql_dbg(ql_dbg_disc, vha, 0x20e6,
				    "%s %d %8phC post del sess - out of loopid\n",
				    __func__, __LINE__, fcport->port_name);
				fcport->scan_state = 0;
				qlt_schedule_sess_for_deletion(fcport, true);
				return;
			}
		}
		ql_dbg(ql_dbg_disc, vha, 0x20bf,
		    "%s %d %8phC post login\n",
		    __func__, __LINE__, fcport->port_name);