lpfc 8.1.7 : Fix memory leak and cleanup code related to per ring lookup array
Subsystems (2)
PATCH 3/15 lpfc 8.1.7 : Fix memory leak and cleanup code related to per ring lookup array
Fix memory leak and cleanup code related to per ring lookup array.
Signed-off-by James Smart <[email protected]>
drivers/scsi/lpfc/lpfc_mem.c +5 -0
@@ -133,6 +133,11 @@ lpfc_mem_free(struct lpfc_hba * phba)pci_pool_destroy (phba->lpfc_scsi_dma_buf_pool);pci_pool_destroy (phba->lpfc_mbuf_pool); + +/* Free the iocb lookup array */ +kfree (psli->iocbq_lookup); + psli->iocbq_lookup =NULL ; + } void *
drivers/scsi/lpfc/lpfc_sli.c +0 -25
@@ -191,35 +191,12 @@ static int lpfc_sli_ringtxcmpl_put(struct lpfc_hba * phba, struct lpfc_sli_ring * pring, struct lpfc_iocbq * piocb) { - uint16_t iotag; - list_add_tail(&piocb->list, &pring->txcmplq); pring->txcmplq_cnt++;if (unlikely (pring->ringno ==LPFC_ELS_RING ))mod_timer (&phba->els_tmofunc, jiffies +HZ * (phba->fc_ratov <<1 )); -if (pring->fast_lookup) { -/* Setup fast lookup based on iotag for completion */ - iotag = piocb->iocb.ulpIoTag; -if (iotag && (iotag < pring->fast_iotag)) - *(pring->fast_lookup + iotag) = piocb; -else { - -/* Cmd ring <ringno> put: iotag <iotag> greater then -configured max <fast_iotag> wd0 <icmd> */ -lpfc_printf_log (phba, -KERN_ERR , -LOG_SLI , -"%d:0316 Cmd ring %d put: iotag x%x " -"greater then configured max x%x " -"wd0 x%x\n" , - phba->brd_no, - pring->ringno, iotag, - pring->fast_iotag, - *(((uint32_t *)(&piocb->iocb)) +7 )); - } - }return (0 ); }
@@ -2659,8 +2636,6 @@ lpfc_sli_hba_down(struct lpfc_hba * phbaINIT_LIST_HEAD (&(pring->txq)); -kfree (pring->fast_lookup); - pring->fast_lookup =NULL ; }spin_unlock_irqrestore (phba->host->host_lock, flags);
drivers/scsi/lpfc/lpfc_sli.h +0 -2
@@ -135,8 +135,6 @@ struct lpfc_sli_ring {uint32_t fast_iotag;/* max fastlookup based iotag */ uint32_t iotag_ctr;/* keeps track of the next iotag to use */ uint32_t iotag_max;/* max iotag value to use */ -struct lpfc_iocbq ** fast_lookup;/* array of IOCB ptrs indexed by -iotag */ struct list_head txq;uint16_t txq_cnt;/* current length of queue */ uint16_t txq_max;/* max length */