diff options
| -rw-r--r-- | drivers/scsi/lpfc/lpfc_hbadisc.c | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/drivers/scsi/lpfc/lpfc_hbadisc.c b/drivers/scsi/lpfc/lpfc_hbadisc.c index 4decb868017e..240492208aba 100644 --- a/drivers/scsi/lpfc/lpfc_hbadisc.c +++ b/drivers/scsi/lpfc/lpfc_hbadisc.c | |||
| @@ -3249,8 +3249,7 @@ lpfc_mbx_cmpl_read_topology(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) | |||
| 3249 | vport->fc_flag &= ~FC_BYPASSED_MODE; | 3249 | vport->fc_flag &= ~FC_BYPASSED_MODE; |
| 3250 | spin_unlock_irq(shost->host_lock); | 3250 | spin_unlock_irq(shost->host_lock); |
| 3251 | 3251 | ||
| 3252 | if ((phba->fc_eventTag < la->eventTag) || | 3252 | if (phba->fc_eventTag <= la->eventTag) { |
| 3253 | (phba->fc_eventTag == la->eventTag)) { | ||
| 3254 | phba->fc_stat.LinkMultiEvent++; | 3253 | phba->fc_stat.LinkMultiEvent++; |
| 3255 | if (bf_get(lpfc_mbx_read_top_att_type, la) == LPFC_ATT_LINK_UP) | 3254 | if (bf_get(lpfc_mbx_read_top_att_type, la) == LPFC_ATT_LINK_UP) |
| 3256 | if (phba->fc_eventTag != 0) | 3255 | if (phba->fc_eventTag != 0) |
| @@ -3258,16 +3257,18 @@ lpfc_mbx_cmpl_read_topology(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) | |||
| 3258 | } | 3257 | } |
| 3259 | 3258 | ||
| 3260 | phba->fc_eventTag = la->eventTag; | 3259 | phba->fc_eventTag = la->eventTag; |
| 3261 | spin_lock_irq(&phba->hbalock); | 3260 | if (phba->sli_rev < LPFC_SLI_REV4) { |
| 3262 | if (bf_get(lpfc_mbx_read_top_mm, la)) | 3261 | spin_lock_irq(&phba->hbalock); |
| 3263 | phba->sli.sli_flag |= LPFC_MENLO_MAINT; | 3262 | if (bf_get(lpfc_mbx_read_top_mm, la)) |
| 3264 | else | 3263 | phba->sli.sli_flag |= LPFC_MENLO_MAINT; |
| 3265 | phba->sli.sli_flag &= ~LPFC_MENLO_MAINT; | 3264 | else |
| 3266 | spin_unlock_irq(&phba->hbalock); | 3265 | phba->sli.sli_flag &= ~LPFC_MENLO_MAINT; |
| 3266 | spin_unlock_irq(&phba->hbalock); | ||
| 3267 | } | ||
| 3267 | 3268 | ||
| 3268 | phba->link_events++; | 3269 | phba->link_events++; |
| 3269 | if ((bf_get(lpfc_mbx_read_top_att_type, la) == LPFC_ATT_LINK_UP) && | 3270 | if ((bf_get(lpfc_mbx_read_top_att_type, la) == LPFC_ATT_LINK_UP) && |
| 3270 | (!bf_get(lpfc_mbx_read_top_mm, la))) { | 3271 | !(phba->sli.sli_flag & LPFC_MENLO_MAINT)) { |
| 3271 | phba->fc_stat.LinkUp++; | 3272 | phba->fc_stat.LinkUp++; |
| 3272 | if (phba->link_flag & LS_LOOPBACK_MODE) { | 3273 | if (phba->link_flag & LS_LOOPBACK_MODE) { |
| 3273 | lpfc_printf_log(phba, KERN_ERR, LOG_LINK_EVENT, | 3274 | lpfc_printf_log(phba, KERN_ERR, LOG_LINK_EVENT, |
| @@ -3312,8 +3313,8 @@ lpfc_mbx_cmpl_read_topology(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) | |||
| 3312 | bf_get(lpfc_mbx_read_top_fa, la)); | 3313 | bf_get(lpfc_mbx_read_top_fa, la)); |
| 3313 | lpfc_mbx_issue_link_down(phba); | 3314 | lpfc_mbx_issue_link_down(phba); |
| 3314 | } | 3315 | } |
| 3315 | if ((bf_get(lpfc_mbx_read_top_mm, la)) && | 3316 | if ((phba->sli.sli_flag & LPFC_MENLO_MAINT) && |
| 3316 | (bf_get(lpfc_mbx_read_top_att_type, la) == LPFC_ATT_LINK_UP)) { | 3317 | ((bf_get(lpfc_mbx_read_top_att_type, la) == LPFC_ATT_LINK_UP))) { |
| 3317 | if (phba->link_state != LPFC_LINK_DOWN) { | 3318 | if (phba->link_state != LPFC_LINK_DOWN) { |
| 3318 | phba->fc_stat.LinkDown++; | 3319 | phba->fc_stat.LinkDown++; |
| 3319 | lpfc_printf_log(phba, KERN_ERR, LOG_LINK_EVENT, | 3320 | lpfc_printf_log(phba, KERN_ERR, LOG_LINK_EVENT, |
| @@ -3341,8 +3342,9 @@ lpfc_mbx_cmpl_read_topology(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) | |||
| 3341 | } | 3342 | } |
| 3342 | } | 3343 | } |
| 3343 | 3344 | ||
| 3344 | if (bf_get(lpfc_mbx_read_top_fa, la)) { | 3345 | if ((phba->sli_rev < LPFC_SLI_REV4) && |
| 3345 | if (bf_get(lpfc_mbx_read_top_mm, la)) | 3346 | bf_get(lpfc_mbx_read_top_fa, la)) { |
| 3347 | if (phba->sli.sli_flag & LPFC_MENLO_MAINT) | ||
| 3346 | lpfc_issue_clear_la(phba, vport); | 3348 | lpfc_issue_clear_la(phba, vport); |
| 3347 | lpfc_printf_log(phba, KERN_INFO, LOG_LINK_EVENT, | 3349 | lpfc_printf_log(phba, KERN_INFO, LOG_LINK_EVENT, |
| 3348 | "1311 fa %d\n", | 3350 | "1311 fa %d\n", |
