summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSha Zhengju <handai.szj@taobao.com>2012-05-10 20:01:45 (GMT)
committerLinus Torvalds <torvalds@linux-foundation.org>2012-05-10 22:06:44 (GMT)
commit8c7577637ca31385e92769a77e2ab5b428e8b99c (patch)
treeecf350b4defdd9ad31a9d1eb6353b890c5951eb9
parent5e2bf0142231194d36fdc9596b36a261ed2b9fe7 (diff)
downloadlinux-fsl-qoriq-8c7577637ca31385e92769a77e2ab5b428e8b99c.tar.xz
memcg: free spare array to avoid memory leak
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>
-rw-r--r--mm/memcontrol.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 31ab9c3..b659260 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -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 */