lpfc 8.3.18: FC/FCoE Discovery fixes
Subsystems (2)
PATCH 1/7 lpfc 8.3.18: FC/FCoE Discovery fixes
FC/FCoE Discovery fixes:
- Call the lpfc_drain_txq only for SLI4 hba
- In lpfc_cmpl_els_fdisc, fix code path that does not free IOCB.
- Treated firmware matching FCF property with different index as error
- Propagate error returns from lpfc_issue_els_flogi()
- Refactored lpfc_unregister_unused_fcf() to create a post lpfc_dev_loss_tmo handler call for SLI-4 devices. Allows checking of fcf after last ndlp released so that fcf can be released if no longer in use.
- Replaced individual FCF_XXXX_DISC flag clearing in lieu of aggregate FCF_DISCOVERY flag upon succesful completion of flogi.
- Correct setting of altBbCredit value in sparams to correct issue with logins with remote loop-based devices.
---
lpfc_els.c | 20 +++++++------- lpfc_hbadisc.c | 79 ++++++++++++++++++++++++++++++--------------------------- lpfc_init.c | 9 +++--- 3 files changed, 58 insertions(+), 50 deletions(-)
drivers/scsi/lpfc/lpfc_els.c +11 -9
@@ -523,12 +523,6 @@ lpfc_cmpl_els_flogi_fabric(struct lpfc_vspin_lock_irq (shost->host_lock); vport->fc_flag |=FC_PUBLIC_LOOP ;spin_unlock_irq (shost->host_lock); - }else { -/* -* If we are a N-port connected to a Fabric, fixup sparam's so -* logins to devices on remote loops work. -*/ - vport->fc_sparam.cmn.altBbCredit =1 ; } vport->fc_myDID = irsp->un.ulpWord[4 ] & Mask_DID;
@@ -1175,12 +1169,13 @@ lpfc_initial_flogi(struct lpfc_vport *vpreturn 0 ; } -if (lpfc_issue_els_flogi (vport, ndlp,0 )) +if (lpfc_issue_els_flogi (vport, ndlp,0 )) {/* This decrement of reference count to node shall kick off * the release of the node. */ lpfc_nlp_put (ndlp); - +return 0 ; + }return 1 ; }
@@ -1645,6 +1640,13 @@ lpfc_issue_els_plogi(struct lpfc_vport *memcpy (pcmd, &vport->fc_sparam,sizeof (struct serv_parm )); sp = (struct serv_parm *) pcmd; +/* +* If we are a N-port connected to a Fabric, fix-up paramm's so logins +* to device on remote loops work. +*/ +if ((vport->fc_flag &FC_FABRIC ) && !(vport->fc_flag &FC_PUBLIC_LOOP )) + sp->cmn.altBbCredit =1 ; +if (sp->cmn.fcphLow <FC_PH_4_3 ) sp->cmn.fcphLow =FC_PH_4_3 ;
@@ -6452,7 +6454,7 @@ lpfc_cmpl_els_fdisc(struct lpfc_hba *phb* to update the MAC address. */ lpfc_register_new_vport (phba, vport, ndlp); -return ; + goto out; }if (vport->fc_flag &FC_VPORT_NEEDS_INIT_VPI )
drivers/scsi/lpfc/lpfc_hbadisc.c +42 -37
104 lines not on this page · raw message
drivers/scsi/lpfc/lpfc_init.c +5 -4
@@ -2234,10 +2234,9 @@ lpfc_stop_vport_timers(struct lpfc_vportvoid __lpfc_sli4_stop_fcf_redisc_wait_timer (struct lpfc_hba *phba) { -/* Clear pending FCF rediscovery wait and failover in progress flags */ - phba->fcf.fcf_flag &= ~(FCF_REDISC_PEND | -FCF_DEAD_DISC | -FCF_ACVL_DISC ); +/* Clear pending FCF rediscovery wait flag */ + phba->fcf.fcf_flag &= ~FCF_REDISC_PEND ; +/* Now, try to stop the timer */ del_timer (&phba->fcf.redisc_wait); }
@@ -2261,6 +2260,8 @@ lpfc_sli4_stop_fcf_redisc_wait_timer(strreturn ; }__lpfc_sli4_stop_fcf_redisc_wait_timer (phba); +/* Clear failover in progress flags */ + phba->fcf.fcf_flag &= ~(FCF_DEAD_DISC |FCF_ACVL_DISC );spin_unlock_irq (&phba->hbalock); }