mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-11 12:44:49 -04:00
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: f352eeb754 ("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: Jason Orendorf <orendorf@hpe.com>
Signed-off-by: Martin Wilck <mwilck@suse.com>
Acked-by: Himanshu Madhani <hmadhani@marvell.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
committed by
Martin K. Petersen
parent
d341e9a8f2
commit
c8a3479318
@@ -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.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user