[SCSI] qla2xxx: Clear any stale login-states during an adapter reset.
By not clearing the 'login needed' nor 'login outstanding' states for an fcport after a big-hammer (adapter reset), the driver may not properly perform a PLOGI/PRLI sequence (and lose visibility to the rport) during a follow-on SNS scan. Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com> Signed-off-by: Madhuranath Iyengar <Madhu.Iyengar@qlogic.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
This commit is contained in:
parent
7a78ceda1c
commit
6aef87bea9
|
@ -3943,6 +3943,7 @@ qla2x00_abort_isp_cleanup(scsi_qla_host_t *vha)
|
|||
struct qla_hw_data *ha = vha->hw;
|
||||
struct scsi_qla_host *vp;
|
||||
unsigned long flags;
|
||||
fc_port_t *fcport;
|
||||
|
||||
vha->flags.online = 0;
|
||||
ha->flags.chip_reset_done = 0;
|
||||
|
@ -3978,6 +3979,22 @@ qla2x00_abort_isp_cleanup(scsi_qla_host_t *vha)
|
|||
LOOP_DOWN_TIME);
|
||||
}
|
||||
|
||||
/* Clear all async request states across all VPs. */
|
||||
list_for_each_entry(fcport, &vha->vp_fcports, list)
|
||||
fcport->flags &= ~(FCF_LOGIN_NEEDED | FCF_ASYNC_SENT);
|
||||
spin_lock_irqsave(&ha->vport_slock, flags);
|
||||
list_for_each_entry(vp, &ha->vp_list, list) {
|
||||
atomic_inc(&vp->vref_count);
|
||||
spin_unlock_irqrestore(&ha->vport_slock, flags);
|
||||
|
||||
list_for_each_entry(fcport, &vp->vp_fcports, list)
|
||||
fcport->flags &= ~(FCF_LOGIN_NEEDED | FCF_ASYNC_SENT);
|
||||
|
||||
spin_lock_irqsave(&ha->vport_slock, flags);
|
||||
atomic_dec(&vp->vref_count);
|
||||
}
|
||||
spin_unlock_irqrestore(&ha->vport_slock, flags);
|
||||
|
||||
if (!ha->flags.eeh_busy) {
|
||||
/* Make sure for ISP 82XX IO DMA is complete */
|
||||
if (IS_QLA82XX(ha))
|
||||
|
|
Loading…
Reference in a new issue