be2iscsi : Fix memory leak in the unload path
authorJohn Soni Jose <sony.john-n@emulex.com>
Sat, 25 Apr 2015 02:47:31 +0000 (08:17 +0530)
committerJames Bottomley <JBottomley@Odin.com>
Mon, 25 May 2015 15:46:32 +0000 (08:46 -0700)
 Driver was not freeing the DMA memory allocated for EQ/CQ in the
 unload path. This patch frees the DMA memory during the driver unload.

Signed-off-by: John Soni Jose <sony.john-n@emulex.com>
Signed-off-by: Jayamohan Kallickal <jayamohan.kallickal@emulex.com>
Reviewed-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <JBottomley@Odin.com>
drivers/scsi/be2iscsi/be_main.c

index a39a60382499ff2376f8e84c539f9d5a8544b21c..7212bb47c0750e265499334b7033dcad798ebf39 100644 (file)
@@ -3695,14 +3695,16 @@ static void be_mcc_queues_destroy(struct beiscsi_hba *phba)
        struct be_ctrl_info *ctrl = &phba->ctrl;
 
        q = &phba->ctrl.mcc_obj.q;
-       if (q->created)
+       if (q->created) {
                beiscsi_cmd_q_destroy(ctrl, q, QTYPE_MCCQ);
-       be_queue_free(phba, q);
+               be_queue_free(phba, q);
+       }
 
        q = &phba->ctrl.mcc_obj.cq;
-       if (q->created)
+       if (q->created) {
                beiscsi_cmd_q_destroy(ctrl, q, QTYPE_CQ);
-       be_queue_free(phba, q);
+               be_queue_free(phba, q);
+       }
 }
 
 static void hwi_cleanup(struct beiscsi_hba *phba)
@@ -3746,8 +3748,10 @@ static void hwi_cleanup(struct beiscsi_hba *phba)
 
        for (i = 0; i < (phba->num_cpus); i++) {
                q = &phwi_context->be_cq[i];
-               if (q->created)
+               if (q->created) {
+                       be_queue_free(phba, q);
                        beiscsi_cmd_q_destroy(ctrl, q, QTYPE_CQ);
+               }
        }
 
        be_mcc_queues_destroy(phba);
@@ -3757,8 +3761,10 @@ static void hwi_cleanup(struct beiscsi_hba *phba)
                eq_for_mcc = 0;
        for (i = 0; i < (phba->num_cpus + eq_for_mcc); i++) {
                q = &phwi_context->be_eq[i].q;
-               if (q->created)
+               if (q->created) {
+                       be_queue_free(phba, q);
                        beiscsi_cmd_q_destroy(ctrl, q, QTYPE_EQ);
+               }
        }
        be_cmd_fw_uninit(ctrl);
 }