lpfc 8.3.43: Fix crash after xri limit is reached.
Subsystems (2)
PATCH 1/8 lpfc 8.3.43: Fix crash after xri limit is reached.
Fix crash after xri limit is reached.
Signed-off-by James Smart <[email protected]>
---
lpfc_scsi.c | 19 ++++++++++++------- lpfc_sli4.h | 1 + 2 files changed, 13 insertions(+), 7 deletions(-)
drivers/scsi/lpfc/lpfc_scsi.c +12 -7
@@ -1012,20 +1012,25 @@ lpfc_new_scsi_buf_s4(struct lpfc_vport *break ; } -/* Allocate iotag for psb->cur_iocbq. */ - iotag =lpfc_sli_next_iotag (phba, &psb->cur_iocbq); -if (iotag ==0 ) { + + lxri =lpfc_sli4_next_xritag (phba); +if (lxri ==NO_XRI ) {pci_pool_free (phba->lpfc_scsi_dma_buf_pool, - psb->data, psb->dma_handle); + psb->data, psb->dma_handle);kfree (psb);break ; } - lxri =lpfc_sli4_next_xritag (phba); -if (lxri ==NO_XRI ) { +/* Allocate iotag for psb->cur_iocbq. */ + iotag =lpfc_sli_next_iotag (phba, &psb->cur_iocbq); +if (iotag ==0 ) {pci_pool_free (phba->lpfc_scsi_dma_buf_pool, - psb->data, psb->dma_handle); + psb->data, psb->dma_handle);kfree (psb); +lpfc_printf_log (phba,KERN_ERR ,LOG_FCP , +"3368 Failed to allocated IOTAG for" +" XRI:0x%x\n" , lxri); +lpfc_sli4_free_xri (phba, lxri);break ; } psb->cur_iocbq.sli4_lxritag = lxri;
drivers/scsi/lpfc/lpfc_sli4.h +1 -0
@@ -673,6 +673,7 @@ void lpfc_sli4_queue_unset(struct lpfc_hint lpfc_sli4_post_sgl (struct lpfc_hba *,dma_addr_t ,dma_addr_t ,uint16_t );int lpfc_sli4_repost_scsi_sgl_list (struct lpfc_hba *);uint16_t lpfc_sli4_next_xritag (struct lpfc_hba *); +void lpfc_sli4_free_xri (struct lpfc_hba *,int );int lpfc_sli4_post_async_mbox (struct lpfc_hba *);int lpfc_sli4_post_scsi_sgl_block (struct lpfc_hba *,struct list_head *,int );struct lpfc_cq_event *__lpfc_sli4_cq_event_alloc (struct lpfc_hba *);