aboutsummaryrefslogtreecommitdiffstats
path: root/mm
diff options
context:
space:
mode:
authorVladimir Davydov <vdavydov@parallels.com>2015-02-12 17:59:56 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2015-02-12 21:54:10 -0500
commitf48b80a5e22200347e91f96b8b237b24b93c7192 (patch)
treed28d2e0915a135cb2cecc3dd144e99d98327b37c /mm
parent932ff6bbbdcadd85b309ef4fd59d4d8a77329b8b (diff)
memcg: cleanup static keys decrement
Move memcg_socket_limit_enabled decrement to tcp_destroy_cgroup (called from memcg_destroy_kmem -> mem_cgroup_sockets_destroy) and zap a bunch of wrapper functions. Although this patch moves static keys decrement from __mem_cgroup_free to mem_cgroup_css_free, it does not introduce any functional changes, because the keys are incremented on setting the limit (tcp or kmem), which can only happen after successful mem_cgroup_css_online. Signed-off-by: Vladimir Davydov <vdavydov@parallels.com> Cc: Glauber Costa <glommer@parallels.com> Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujtisu.com> Cc: Eric W. Biederman <ebiederm@xmission.com> Cc: David S. Miller <davem@davemloft.net> Cc: Johannes Weiner <hannes@cmpxchg.org> Acked-by: Michal Hocko <mhocko@suse.cz> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm')
-rw-r--r--mm/memcontrol.c38
1 files changed, 5 insertions, 33 deletions
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 419c06b1794a..d18d3a6e7337 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -519,16 +519,6 @@ struct cg_proto *tcp_proto_cgroup(struct mem_cgroup *memcg)
519} 519}
520EXPORT_SYMBOL(tcp_proto_cgroup); 520EXPORT_SYMBOL(tcp_proto_cgroup);
521 521
522static void disarm_sock_keys(struct mem_cgroup *memcg)
523{
524 if (!memcg_proto_activated(&memcg->tcp_mem))
525 return;
526 static_key_slow_dec(&memcg_socket_limit_enabled);
527}
528#else
529static void disarm_sock_keys(struct mem_cgroup *memcg)
530{
531}
532#endif 522#endif
533 523
534#ifdef CONFIG_MEMCG_KMEM 524#ifdef CONFIG_MEMCG_KMEM
@@ -583,28 +573,8 @@ void memcg_put_cache_ids(void)
583struct static_key memcg_kmem_enabled_key; 573struct static_key memcg_kmem_enabled_key;
584EXPORT_SYMBOL(memcg_kmem_enabled_key); 574EXPORT_SYMBOL(memcg_kmem_enabled_key);
585 575
586static void disarm_kmem_keys(struct mem_cgroup *memcg)
587{
588 if (memcg->kmem_acct_activated)
589 static_key_slow_dec(&memcg_kmem_enabled_key);
590 /*
591 * This check can't live in kmem destruction function,
592 * since the charges will outlive the cgroup
593 */
594 WARN_ON(page_counter_read(&memcg->kmem));
595}
596#else
597static void disarm_kmem_keys(struct mem_cgroup *memcg)
598{
599}
600#endif /* CONFIG_MEMCG_KMEM */ 576#endif /* CONFIG_MEMCG_KMEM */
601 577
602static void disarm_static_keys(struct mem_cgroup *memcg)
603{
604 disarm_sock_keys(memcg);
605 disarm_kmem_keys(memcg);
606}
607
608static struct mem_cgroup_per_zone * 578static struct mem_cgroup_per_zone *
609mem_cgroup_zone_zoneinfo(struct mem_cgroup *memcg, struct zone *zone) 579mem_cgroup_zone_zoneinfo(struct mem_cgroup *memcg, struct zone *zone)
610{ 580{
@@ -4092,7 +4062,11 @@ static void memcg_deactivate_kmem(struct mem_cgroup *memcg)
4092 4062
4093static void memcg_destroy_kmem(struct mem_cgroup *memcg) 4063static void memcg_destroy_kmem(struct mem_cgroup *memcg)
4094{ 4064{
4095 memcg_destroy_kmem_caches(memcg); 4065 if (memcg->kmem_acct_activated) {
4066 memcg_destroy_kmem_caches(memcg);
4067 static_key_slow_dec(&memcg_kmem_enabled_key);
4068 WARN_ON(page_counter_read(&memcg->kmem));
4069 }
4096 mem_cgroup_sockets_destroy(memcg); 4070 mem_cgroup_sockets_destroy(memcg);
4097} 4071}
4098#else 4072#else
@@ -4523,8 +4497,6 @@ static void __mem_cgroup_free(struct mem_cgroup *memcg)
4523 free_mem_cgroup_per_zone_info(memcg, node); 4497 free_mem_cgroup_per_zone_info(memcg, node);
4524 4498
4525 free_percpu(memcg->stat); 4499 free_percpu(memcg->stat);
4526
4527 disarm_static_keys(memcg);
4528 kfree(memcg); 4500 kfree(memcg);
4529} 4501}
4530 4502