diff options
author | Vladimir Davydov <vdavydov@parallels.com> | 2015-02-12 17:59:56 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-02-12 21:54:10 -0500 |
commit | f48b80a5e22200347e91f96b8b237b24b93c7192 (patch) | |
tree | d28d2e0915a135cb2cecc3dd144e99d98327b37c /mm | |
parent | 932ff6bbbdcadd85b309ef4fd59d4d8a77329b8b (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.c | 38 |
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 | } |
520 | EXPORT_SYMBOL(tcp_proto_cgroup); | 520 | EXPORT_SYMBOL(tcp_proto_cgroup); |
521 | 521 | ||
522 | static 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 | ||
529 | static 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) | |||
583 | struct static_key memcg_kmem_enabled_key; | 573 | struct static_key memcg_kmem_enabled_key; |
584 | EXPORT_SYMBOL(memcg_kmem_enabled_key); | 574 | EXPORT_SYMBOL(memcg_kmem_enabled_key); |
585 | 575 | ||
586 | static 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 | ||
597 | static void disarm_kmem_keys(struct mem_cgroup *memcg) | ||
598 | { | ||
599 | } | ||
600 | #endif /* CONFIG_MEMCG_KMEM */ | 576 | #endif /* CONFIG_MEMCG_KMEM */ |
601 | 577 | ||
602 | static void disarm_static_keys(struct mem_cgroup *memcg) | ||
603 | { | ||
604 | disarm_sock_keys(memcg); | ||
605 | disarm_kmem_keys(memcg); | ||
606 | } | ||
607 | |||
608 | static struct mem_cgroup_per_zone * | 578 | static struct mem_cgroup_per_zone * |
609 | mem_cgroup_zone_zoneinfo(struct mem_cgroup *memcg, struct zone *zone) | 579 | mem_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 | ||
4093 | static void memcg_destroy_kmem(struct mem_cgroup *memcg) | 4063 | static 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 | ||