memcg: free spare array to avoid memory leak
authorSha Zhengju <handai.szj@taobao.com>
Thu, 10 May 2012 20:01:45 +0000 (13:01 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 10 May 2012 22:06:44 +0000 (15:06 -0700)
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>
mm/memcontrol.c

index 31ab9c3f0178d3f7193d5e2b6e6935926cf1d48d..b659260c56ad5591c4debdae6b865a057fb01b7c 100644 (file)
@@ -4507,6 +4507,12 @@ static void mem_cgroup_usage_unregister_event(struct cgroup *cgrp,
 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 */