scsi: lpfc: Reorder freeing of various DMA buffers and their list removal
authorJustin Tee <justin.tee@broadcom.com>
Wed, 1 Mar 2023 23:16:18 +0000 (15:16 -0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Fri, 10 Mar 2023 02:21:44 +0000 (21:21 -0500)
Code sections where DMA resources are freed before list removal are
reworked to ensure item removal before being freed.

Signed-off-by: Justin Tee <justin.tee@broadcom.com>
Link: https://lore.kernel.org/r/20230301231626.9621-3-justintee8345@gmail.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/lpfc/lpfc_bsg.c
drivers/scsi/lpfc/lpfc_ct.c
drivers/scsi/lpfc/lpfc_sli.c

index 852b025e2fecf9ebaa74e87ded2e36f225cbac32..d8e86b468ef6a19ac543a2466e827ce1887ee6e6 100644 (file)
@@ -134,8 +134,8 @@ lpfc_free_bsg_buffers(struct lpfc_hba *phba, struct lpfc_dmabuf *mlist)
        if (mlist) {
                list_for_each_entry_safe(mlast, next_mlast, &mlist->list,
                                         list) {
-                       lpfc_mbuf_free(phba, mlast->virt, mlast->phys);
                        list_del(&mlast->list);
+                       lpfc_mbuf_free(phba, mlast->virt, mlast->phys);
                        kfree(mlast);
                }
                lpfc_mbuf_free(phba, mlist->virt, mlist->phys);
index e941a99aa96592de9923a1761ef111d0c56bb14d..e290aff2e881761b4ea7e9424f5b2bdf18ba05f7 100644 (file)
@@ -476,8 +476,8 @@ lpfc_free_ct_rsp(struct lpfc_hba *phba, struct lpfc_dmabuf *mlist)
        struct lpfc_dmabuf *mlast, *next_mlast;
 
        list_for_each_entry_safe(mlast, next_mlast, &mlist->list, list) {
-               lpfc_mbuf_free(phba, mlast->virt, mlast->phys);
                list_del(&mlast->list);
+               lpfc_mbuf_free(phba, mlast->virt, mlast->phys);
                kfree(mlast);
        }
        lpfc_mbuf_free(phba, mlist->virt, mlist->phys);
index c5b69f313af365694f77f83fb569e427f084acd4..bfab1f0fb3f0d0a4408183258b042c81c55f3143 100644 (file)
@@ -22329,10 +22329,10 @@ lpfc_free_sgl_per_hdwq(struct lpfc_hba *phba,
        /* Free sgl pool */
        list_for_each_entry_safe(list_entry, tmp,
                                 buf_list, list_node) {
+               list_del(&list_entry->list_node);
                dma_pool_free(phba->lpfc_sg_dma_buf_pool,
                              list_entry->dma_sgl,
                              list_entry->dma_phys_sgl);
-               list_del(&list_entry->list_node);
                kfree(list_entry);
        }
 
@@ -22479,10 +22479,10 @@ lpfc_free_cmd_rsp_buf_per_hdwq(struct lpfc_hba *phba,
        list_for_each_entry_safe(list_entry, tmp,
                                 buf_list,
                                 list_node) {
+               list_del(&list_entry->list_node);
                dma_pool_free(phba->lpfc_cmd_rsp_buf_pool,
                              list_entry->fcp_cmnd,
                              list_entry->fcp_cmd_rsp_dma_handle);
-               list_del(&list_entry->list_node);
                kfree(list_entry);
        }