diff options
author | Vladimir Davydov <vdavydov@parallels.com> | 2014-06-04 19:08:23 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-06-04 19:54:06 -0400 |
commit | 073ee1c6cd11cd190f4d0da84d9b4ba79d7b9e70 (patch) | |
tree | b15246321eb6b1e4faea04a46f6ea998d608044e /mm/memcontrol.c | |
parent | b5ffc8560cf758422e85b786cca32cd7e1513a7f (diff) |
memcg: get rid of memcg_create_cache_name
Instead of calling back to memcontrol.c from kmem_cache_create_memcg in
order to just create the name of a per memcg cache, let's allocate it in
place. We only need to pass the memcg name to kmem_cache_create_memcg for
that - everything else can be done in slab_common.c.
Signed-off-by: Vladimir Davydov <vdavydov@parallels.com>
Acked-by: Michal Hocko <mhocko@suse.cz>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/memcontrol.c')
-rw-r--r-- | mm/memcontrol.c | 33 |
1 files changed, 9 insertions, 24 deletions
diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 971d7b643f6e..7df7f599e3df 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c | |||
@@ -3095,29 +3095,6 @@ int memcg_update_cache_size(struct kmem_cache *s, int num_groups) | |||
3095 | return 0; | 3095 | return 0; |
3096 | } | 3096 | } |
3097 | 3097 | ||
3098 | char *memcg_create_cache_name(struct mem_cgroup *memcg, | ||
3099 | struct kmem_cache *root_cache) | ||
3100 | { | ||
3101 | static char *buf; | ||
3102 | |||
3103 | /* | ||
3104 | * We need a mutex here to protect the shared buffer. Since this is | ||
3105 | * expected to be called only on cache creation, we can employ the | ||
3106 | * slab_mutex for that purpose. | ||
3107 | */ | ||
3108 | lockdep_assert_held(&slab_mutex); | ||
3109 | |||
3110 | if (!buf) { | ||
3111 | buf = kmalloc(NAME_MAX + 1, GFP_KERNEL); | ||
3112 | if (!buf) | ||
3113 | return NULL; | ||
3114 | } | ||
3115 | |||
3116 | cgroup_name(memcg->css.cgroup, buf, NAME_MAX + 1); | ||
3117 | return kasprintf(GFP_KERNEL, "%s(%d:%s)", root_cache->name, | ||
3118 | memcg_cache_id(memcg), buf); | ||
3119 | } | ||
3120 | |||
3121 | int memcg_alloc_cache_params(struct mem_cgroup *memcg, struct kmem_cache *s, | 3098 | int memcg_alloc_cache_params(struct mem_cgroup *memcg, struct kmem_cache *s, |
3122 | struct kmem_cache *root_cache) | 3099 | struct kmem_cache *root_cache) |
3123 | { | 3100 | { |
@@ -3158,6 +3135,7 @@ void memcg_free_cache_params(struct kmem_cache *s) | |||
3158 | static void memcg_kmem_create_cache(struct mem_cgroup *memcg, | 3135 | static void memcg_kmem_create_cache(struct mem_cgroup *memcg, |
3159 | struct kmem_cache *root_cache) | 3136 | struct kmem_cache *root_cache) |
3160 | { | 3137 | { |
3138 | static char *memcg_name_buf; /* protected by memcg_slab_mutex */ | ||
3161 | struct kmem_cache *cachep; | 3139 | struct kmem_cache *cachep; |
3162 | int id; | 3140 | int id; |
3163 | 3141 | ||
@@ -3173,7 +3151,14 @@ static void memcg_kmem_create_cache(struct mem_cgroup *memcg, | |||
3173 | if (cache_from_memcg_idx(root_cache, id)) | 3151 | if (cache_from_memcg_idx(root_cache, id)) |
3174 | return; | 3152 | return; |
3175 | 3153 | ||
3176 | cachep = kmem_cache_create_memcg(memcg, root_cache); | 3154 | if (!memcg_name_buf) { |
3155 | memcg_name_buf = kmalloc(NAME_MAX + 1, GFP_KERNEL); | ||
3156 | if (!memcg_name_buf) | ||
3157 | return; | ||
3158 | } | ||
3159 | |||
3160 | cgroup_name(memcg->css.cgroup, memcg_name_buf, NAME_MAX + 1); | ||
3161 | cachep = kmem_cache_create_memcg(memcg, root_cache, memcg_name_buf); | ||
3177 | /* | 3162 | /* |
3178 | * If we could not create a memcg cache, do not complain, because | 3163 | * If we could not create a memcg cache, do not complain, because |
3179 | * that's not critical at all as we can always proceed with the root | 3164 | * that's not critical at all as we can always proceed with the root |