| From 8c7577637ca31385e92769a77e2ab5b428e8b99c Mon Sep 17 00:00:00 2001 |
| From: Sha Zhengju <handai.szj@taobao.com> |
| Date: Thu, 10 May 2012 13:01:45 -0700 |
| Subject: memcg: free spare array to avoid memory leak |
| |
| From: Sha Zhengju <handai.szj@taobao.com> |
| |
| commit 8c7577637ca31385e92769a77e2ab5b428e8b99c upstream. |
| |
| When the last event is unregistered, there is no need to keep the spare |
| array anymore. So free it to avoid memory leak. |
| |
| Signed-off-by: Sha Zhengju <handai.szj@taobao.com> |
| Acked-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> |
| Reviewed-by: Kirill A. Shutemov <kirill@shutemov.name> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| mm/memcontrol.c | 6 ++++++ |
| 1 file changed, 6 insertions(+) |
| |
| --- a/mm/memcontrol.c |
| +++ b/mm/memcontrol.c |
| @@ -4605,6 +4605,12 @@ static void mem_cgroup_usage_unregister_ |
| swap_buffers: |
| /* Swap primary and spare array */ |
| thresholds->spare = thresholds->primary; |
| + /* If all events are unregistered, free the spare array */ |
| + if (!new) { |
| + kfree(thresholds->spare); |
| + thresholds->spare = NULL; |
| + } |
| + |
| rcu_assign_pointer(thresholds->primary, new); |
| |
| /* To be sure that nobody uses thresholds */ |