Commit c8a34793 authored by Martin Wilck's avatar Martin Wilck Committed by Martin K. Petersen
Browse files

scsi: qla2xxx: unregister ports after GPN_FT failure

When ports are lost due to unzoning them, and the initiator port is
not part of any more zones, the GPN_FT command used for the fabric
scan may fail. In this case, the current code simply gives up after a
few retries. But if the zone is gone, all rports should actually be
marked as lost.

Fix this by jumping to the code that handles logout after GNN_FT after
scan retries are exhausted.

Fixes: f352eeb7 ("scsi: qla2xxx: Add ability to use GPNFT/GNNFT for RSCN handling")
Link: https://lore.kernel.org/r/20191122221912.20100-3-martin.wilck@suse.com


Tested-by: default avatarJason Orendorf <orendorf@hpe.com>
Signed-off-by: default avatarMartin Wilck <mwilck@suse.com>
Acked-by: default avatarHimanshu Madhani <hmadhani@marvell.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent d341e9a8
Loading
Loading
Loading
Loading
+14 −2
Original line number Diff line number Diff line
@@ -3587,12 +3587,23 @@ void qla24xx_async_gnnft_done(scsi_qla_host_t *vha, srb_t *sp)
		if (vha->scan.scan_retry < MAX_SCAN_RETRIES) {
			set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags);
			set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags);
			goto out;
		} else {
			ql_dbg(ql_dbg_disc + ql_dbg_verbose, vha, 0xffff,
			ql_dbg(ql_dbg_disc, vha, 0xffff,
			    "%s: Fabric scan failed for %d retries.\n",
			    __func__, vha->scan.scan_retry);
			/*
			 * Unable to scan any rports. logout loop below
			 * will unregister all sessions.
			 */
			list_for_each_entry(fcport, &vha->vp_fcports, list) {
				if ((fcport->flags & FCF_FABRIC_DEVICE) != 0) {
					fcport->scan_state = QLA_FCPORT_SCAN;
					fcport->logout_on_delete = 0;
				}
			}
			goto login_logout;
		}
		goto out;
	}
	vha->scan.scan_retry = 0;

@@ -3670,6 +3681,7 @@ void qla24xx_async_gnnft_done(scsi_qla_host_t *vha, srb_t *sp)
		    dup_cnt);
	}

login_logout:
	/*
	 * Logout all previous fabric dev marked lost, except FCP2 devices.
	 */