lpfc: Fix to handle PLOGI when already logged in
Subsystems (2)
PATCH 4/21 lpfc: Fix to handle PLOGI when already logged in
Fix to handle PLOGI when already logged in
Signed-off-by Dick Kennedy <[email protected]>
Signed-off-by James Smart <[email protected]>
--- drivers/scsi/lpfc/lpfc_nportdisc.c | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-)
drivers/scsi/lpfc/lpfc_nportdisc.c +24 -3
@@ -276,6 +276,7 @@ lpfc_rcv_plogi(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,struct Scsi_Host *shost =lpfc_shost_from_vport (vport);struct lpfc_hba *phba = vport->phba;struct lpfc_dmabuf *pcmd; +uint64_t nlp_portwwn =0 ;uint32_t *lp;IOCB_t *icmd;struct serv_parm *sp;
@@ -332,6 +333,8 @@ lpfc_rcv_plogi(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp, NULL);return 0 ; } + + nlp_portwwn =wwn_to_u64 (ndlp->nlp_portname.u.wwn);if ((lpfc_check_sparm (vport, ndlp, sp,CLASS3 ,0 ) ==0 )) {/* Reject this request because invalid parameters */ stat.un.b.lsRjtRsnCode =LSRJT_UNABLE_TPC ;
@@ -367,7 +370,7 @@ lpfc_rcv_plogi(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp, ndlp->nlp_maxframe = ((sp->cmn.bbRcvSizeMsb &0x0F ) <<8 ) | sp->cmn.bbRcvSizeLsb; -/* no need to reg_login if we are already in one of these states */ +/* if already logged in, do implicit logout */ switch (ndlp->nlp_state) {case NLP_STE_NPR_NODE :if (!(ndlp->nlp_flag &NLP_NPR_ADISC ))
@@ -376,8 +379,26 @@ lpfc_rcv_plogi(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,case NLP_STE_PRLI_ISSUE :case NLP_STE_UNMAPPED_NODE :case NLP_STE_MAPPED_NODE : -lpfc_els_rsp_acc (vport,ELS_CMD_PLOGI , cmdiocb, ndlp,NULL ); -return 1 ; +/* lpfc_plogi_confirm_nport skips fabric did, handle it here */ +if (!(ndlp->nlp_type &NLP_FABRIC )) { +lpfc_els_rsp_acc (vport,ELS_CMD_PLOGI , cmdiocb, + ndlp,NULL ); +return 1 ; + } +if (nlp_portwwn !=0 && + nlp_portwwn !=wwn_to_u64 (sp->portName.u.wwn)) +lpfc_printf_vlog (vport,KERN_ERR ,LOG_ELS , +"0143 PLOGI recv'd from DID: x%x " +"WWPN changed: old %llx new %llx\n" , + ndlp->nlp_DID, + (unsigned long long )nlp_portwwn, + (unsigned long long ) +wwn_to_u64 (sp->portName.u.wwn)); + + ndlp->nlp_prev_state = ndlp->nlp_state; +/* rport needs to be unregistered first */ +lpfc_nlp_set_state (vport, ndlp,NLP_STE_NPR_NODE ); +break ; }/* Check for Nport to NPort pt2pt protocol */
Signature · 1 line
1.7.11.7
Quoted 5 lines · James Smart
Fix to handle PLOGI when already logged in
Signed-off-by Dick Kennedy <[email protected]>Signed-off-by James Smart <[email protected]>---
Reviewed-by Hannes Reinecke <[email protected]>
Cheers,
Hannes
Signature · 8 lines
Dr. Hannes Reinecke zSeries & Storage [email protected] +49 911 74053 688 SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg GF: J. Hawn, J. Guild, F. Imendörffer, HRB 16746 (AG Nürnberg) -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html