IB/hfi1: Fix a subcontext memory leak
The only context that frees user_exp_rcv data structures is the last context closed (from a sub-context set). This leaks the allocations from the other sub-contexts. Separate the common frees from the specific frees and call them at the appropriate time. Using KEDR to check for memory leaks we get: Before test: [leak_check] Possible leaks: 25 After test: [leak_check] Possible leaks: 31 (6 leaked data structures) After patch applied (before and after test have the same value) [leak_check] Possible leaks: 25 Each leak is 192 + 13440 + 6720 = 20352 bytes per sub-context. Cc: stable@vger.kernel.org Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com> Signed-off-by: Michael J. Ruhl <michael.j.ruhl@intel.com> Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
这个提交包含在:
@@ -756,6 +756,9 @@ static int hfi1_file_close(struct inode *inode, struct file *fp)
|
||||
/* release the cpu */
|
||||
hfi1_put_proc_affinity(fdata->rec_cpu_num);
|
||||
|
||||
/* clean up rcv side */
|
||||
hfi1_user_exp_rcv_free(fdata);
|
||||
|
||||
/*
|
||||
* Clear any left over, unhandled events so the next process that
|
||||
* gets this context doesn't get confused.
|
||||
@@ -795,7 +798,7 @@ static int hfi1_file_close(struct inode *inode, struct file *fp)
|
||||
|
||||
dd->rcd[uctxt->ctxt] = NULL;
|
||||
|
||||
hfi1_user_exp_rcv_free(fdata);
|
||||
hfi1_user_exp_rcv_grp_free(uctxt);
|
||||
hfi1_clear_ctxt_pkey(dd, uctxt->ctxt);
|
||||
|
||||
uctxt->rcvwait_to = 0;
|
||||
|
在新工单中引用
屏蔽一个用户