diff options
Diffstat (limited to 'drivers/scsi/lpfc/lpfc_sli.c')
-rw-r--r-- | drivers/scsi/lpfc/lpfc_sli.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c index 1ab7937097a..7a61455140b 100644 --- a/drivers/scsi/lpfc/lpfc_sli.c +++ b/drivers/scsi/lpfc/lpfc_sli.c | |||
@@ -12661,6 +12661,7 @@ lpfc_cleanup_pending_mbox(struct lpfc_vport *vport) | |||
12661 | struct lpfc_hba *phba = vport->phba; | 12661 | struct lpfc_hba *phba = vport->phba; |
12662 | LPFC_MBOXQ_t *mb, *nextmb; | 12662 | LPFC_MBOXQ_t *mb, *nextmb; |
12663 | struct lpfc_dmabuf *mp; | 12663 | struct lpfc_dmabuf *mp; |
12664 | struct lpfc_nodelist *ndlp; | ||
12664 | 12665 | ||
12665 | spin_lock_irq(&phba->hbalock); | 12666 | spin_lock_irq(&phba->hbalock); |
12666 | list_for_each_entry_safe(mb, nextmb, &phba->sli.mboxq, list) { | 12667 | list_for_each_entry_safe(mb, nextmb, &phba->sli.mboxq, list) { |
@@ -12677,6 +12678,11 @@ lpfc_cleanup_pending_mbox(struct lpfc_vport *vport) | |||
12677 | __lpfc_mbuf_free(phba, mp->virt, mp->phys); | 12678 | __lpfc_mbuf_free(phba, mp->virt, mp->phys); |
12678 | kfree(mp); | 12679 | kfree(mp); |
12679 | } | 12680 | } |
12681 | ndlp = (struct lpfc_nodelist *) mb->context2; | ||
12682 | if (ndlp) { | ||
12683 | lpfc_nlp_put(ndlp); | ||
12684 | mb->context2 = NULL; | ||
12685 | } | ||
12680 | } | 12686 | } |
12681 | list_del(&mb->list); | 12687 | list_del(&mb->list); |
12682 | mempool_free(mb, phba->mbox_mem_pool); | 12688 | mempool_free(mb, phba->mbox_mem_pool); |
@@ -12686,6 +12692,15 @@ lpfc_cleanup_pending_mbox(struct lpfc_vport *vport) | |||
12686 | if ((mb->u.mb.mbxCommand == MBX_REG_LOGIN64) || | 12692 | if ((mb->u.mb.mbxCommand == MBX_REG_LOGIN64) || |
12687 | (mb->u.mb.mbxCommand == MBX_REG_VPI)) | 12693 | (mb->u.mb.mbxCommand == MBX_REG_VPI)) |
12688 | mb->mbox_cmpl = lpfc_sli_def_mbox_cmpl; | 12694 | mb->mbox_cmpl = lpfc_sli_def_mbox_cmpl; |
12695 | if (mb->u.mb.mbxCommand == MBX_REG_LOGIN64) { | ||
12696 | ndlp = (struct lpfc_nodelist *) mb->context2; | ||
12697 | if (ndlp) { | ||
12698 | lpfc_nlp_put(ndlp); | ||
12699 | mb->context2 = NULL; | ||
12700 | } | ||
12701 | /* Unregister the RPI when mailbox complete */ | ||
12702 | mb->mbox_flag |= LPFC_MBX_IMED_UNREG; | ||
12703 | } | ||
12689 | } | 12704 | } |
12690 | spin_unlock_irq(&phba->hbalock); | 12705 | spin_unlock_irq(&phba->hbalock); |
12691 | } | 12706 | } |