diff options
Diffstat (limited to 'drivers/scsi/lpfc/lpfc_els.c')
-rw-r--r-- | drivers/scsi/lpfc/lpfc_els.c | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c index d34b69f9cdb1..04a5aeb41470 100644 --- a/drivers/scsi/lpfc/lpfc_els.c +++ b/drivers/scsi/lpfc/lpfc_els.c | |||
@@ -670,6 +670,7 @@ lpfc_cmpl_els_flogi_fabric(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp, | |||
670 | * Driver needs to re-reg VPI in order for f/w | 670 | * Driver needs to re-reg VPI in order for f/w |
671 | * to update the MAC address. | 671 | * to update the MAC address. |
672 | */ | 672 | */ |
673 | lpfc_nlp_set_state(vport, ndlp, NLP_STE_UNMAPPED_NODE); | ||
673 | lpfc_register_new_vport(phba, vport, ndlp); | 674 | lpfc_register_new_vport(phba, vport, ndlp); |
674 | return 0; | 675 | return 0; |
675 | } | 676 | } |
@@ -869,8 +870,8 @@ lpfc_cmpl_els_flogi(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb, | |||
869 | */ | 870 | */ |
870 | if ((phba->hba_flag & HBA_FIP_SUPPORT) && | 871 | if ((phba->hba_flag & HBA_FIP_SUPPORT) && |
871 | (phba->fcf.fcf_flag & FCF_DISCOVERY) && | 872 | (phba->fcf.fcf_flag & FCF_DISCOVERY) && |
872 | (irsp->ulpStatus != IOSTAT_LOCAL_REJECT) && | 873 | !((irsp->ulpStatus == IOSTAT_LOCAL_REJECT) && |
873 | (irsp->un.ulpWord[4] != IOERR_SLI_ABORTED)) { | 874 | (irsp->un.ulpWord[4] == IOERR_SLI_ABORTED))) { |
874 | lpfc_printf_log(phba, KERN_WARNING, LOG_FIP | LOG_ELS, | 875 | lpfc_printf_log(phba, KERN_WARNING, LOG_FIP | LOG_ELS, |
875 | "2611 FLOGI failed on FCF (x%x), " | 876 | "2611 FLOGI failed on FCF (x%x), " |
876 | "status:x%x/x%x, tmo:x%x, perform " | 877 | "status:x%x/x%x, tmo:x%x, perform " |
@@ -4107,13 +4108,13 @@ lpfc_els_clear_rrq(struct lpfc_vport *vport, | |||
4107 | pcmd += sizeof(uint32_t); | 4108 | pcmd += sizeof(uint32_t); |
4108 | rrq = (struct RRQ *)pcmd; | 4109 | rrq = (struct RRQ *)pcmd; |
4109 | rrq->rrq_exchg = be32_to_cpu(rrq->rrq_exchg); | 4110 | rrq->rrq_exchg = be32_to_cpu(rrq->rrq_exchg); |
4110 | rxid = be16_to_cpu(bf_get(rrq_rxid, rrq)); | 4111 | rxid = bf_get(rrq_rxid, rrq); |
4111 | 4112 | ||
4112 | lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, | 4113 | lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, |
4113 | "2883 Clear RRQ for SID:x%x OXID:x%x RXID:x%x" | 4114 | "2883 Clear RRQ for SID:x%x OXID:x%x RXID:x%x" |
4114 | " x%x x%x\n", | 4115 | " x%x x%x\n", |
4115 | be32_to_cpu(bf_get(rrq_did, rrq)), | 4116 | be32_to_cpu(bf_get(rrq_did, rrq)), |
4116 | be16_to_cpu(bf_get(rrq_oxid, rrq)), | 4117 | bf_get(rrq_oxid, rrq), |
4117 | rxid, | 4118 | rxid, |
4118 | iocb->iotag, iocb->iocb.ulpContext); | 4119 | iocb->iotag, iocb->iocb.ulpContext); |
4119 | 4120 | ||
@@ -4121,7 +4122,7 @@ lpfc_els_clear_rrq(struct lpfc_vport *vport, | |||
4121 | "Clear RRQ: did:x%x flg:x%x exchg:x%.08x", | 4122 | "Clear RRQ: did:x%x flg:x%x exchg:x%.08x", |
4122 | ndlp->nlp_DID, ndlp->nlp_flag, rrq->rrq_exchg); | 4123 | ndlp->nlp_DID, ndlp->nlp_flag, rrq->rrq_exchg); |
4123 | if (vport->fc_myDID == be32_to_cpu(bf_get(rrq_did, rrq))) | 4124 | if (vport->fc_myDID == be32_to_cpu(bf_get(rrq_did, rrq))) |
4124 | xri = be16_to_cpu(bf_get(rrq_oxid, rrq)); | 4125 | xri = bf_get(rrq_oxid, rrq); |
4125 | else | 4126 | else |
4126 | xri = rxid; | 4127 | xri = rxid; |
4127 | prrq = lpfc_get_active_rrq(vport, xri, ndlp->nlp_DID); | 4128 | prrq = lpfc_get_active_rrq(vport, xri, ndlp->nlp_DID); |
@@ -7290,8 +7291,9 @@ lpfc_cmpl_els_npiv_logo(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb, | |||
7290 | struct lpfc_vport *vport = cmdiocb->vport; | 7291 | struct lpfc_vport *vport = cmdiocb->vport; |
7291 | IOCB_t *irsp; | 7292 | IOCB_t *irsp; |
7292 | struct lpfc_nodelist *ndlp; | 7293 | struct lpfc_nodelist *ndlp; |
7293 | ndlp = (struct lpfc_nodelist *)cmdiocb->context1; | 7294 | struct Scsi_Host *shost = lpfc_shost_from_vport(vport); |
7294 | 7295 | ||
7296 | ndlp = (struct lpfc_nodelist *)cmdiocb->context1; | ||
7295 | irsp = &rspiocb->iocb; | 7297 | irsp = &rspiocb->iocb; |
7296 | lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_CMD, | 7298 | lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_CMD, |
7297 | "LOGO npiv cmpl: status:x%x/x%x did:x%x", | 7299 | "LOGO npiv cmpl: status:x%x/x%x did:x%x", |
@@ -7302,6 +7304,19 @@ lpfc_cmpl_els_npiv_logo(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb, | |||
7302 | 7304 | ||
7303 | /* Trigger the release of the ndlp after logo */ | 7305 | /* Trigger the release of the ndlp after logo */ |
7304 | lpfc_nlp_put(ndlp); | 7306 | lpfc_nlp_put(ndlp); |
7307 | |||
7308 | /* NPIV LOGO completes to NPort <nlp_DID> */ | ||
7309 | lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, | ||
7310 | "2928 NPIV LOGO completes to NPort x%x " | ||
7311 | "Data: x%x x%x x%x x%x\n", | ||
7312 | ndlp->nlp_DID, irsp->ulpStatus, irsp->un.ulpWord[4], | ||
7313 | irsp->ulpTimeout, vport->num_disc_nodes); | ||
7314 | |||
7315 | if (irsp->ulpStatus == IOSTAT_SUCCESS) { | ||
7316 | spin_lock_irq(shost->host_lock); | ||
7317 | vport->fc_flag &= ~FC_FABRIC; | ||
7318 | spin_unlock_irq(shost->host_lock); | ||
7319 | } | ||
7305 | } | 7320 | } |
7306 | 7321 | ||
7307 | /** | 7322 | /** |