Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

memcg: get rid of kmem_cache_dup()

kmem_cache_dup() is only called from memcg_create_kmem_cache(). The
latter, in fact, does nothing besides this, so let's fold
kmem_cache_dup() into memcg_create_kmem_cache().

This patch also makes the memcg_cache_mutex private to
memcg_create_kmem_cache(), because it is not used anywhere else.

Signed-off-by: Vladimir Davydov <vdavydov@parallels.com>
Cc: Michal Hocko <mhocko@suse.cz>
Cc: Glauber Costa <glommer@gmail.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Balbir Singh <bsingharora@gmail.com>
Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Vladimir Davydov and committed by
Linus Torvalds
842e2873 2edefe11

+8 -31
+8 -31
mm/memcontrol.c
··· 3427 3427 schedule_work(&cachep->memcg_params->destroy); 3428 3428 } 3429 3429 3430 - /* 3431 - * This lock protects updaters, not readers. We want readers to be as fast as 3432 - * they can, and they will either see NULL or a valid cache value. Our model 3433 - * allow them to see NULL, in which case the root memcg will be selected. 3434 - * 3435 - * We need this lock because multiple allocations to the same cache from a non 3436 - * will span more than one worker. Only one of them can create the cache. 3437 - */ 3438 - static DEFINE_MUTEX(memcg_cache_mutex); 3439 - 3440 - /* 3441 - * Called with memcg_cache_mutex held 3442 - */ 3443 - static struct kmem_cache *kmem_cache_dup(struct mem_cgroup *memcg, 3444 - struct kmem_cache *s) 3430 + static struct kmem_cache *memcg_create_kmem_cache(struct mem_cgroup *memcg, 3431 + struct kmem_cache *s) 3445 3432 { 3446 3433 struct kmem_cache *new; 3447 3434 static char *tmp_name = NULL; 3435 + static DEFINE_MUTEX(mutex); /* protects tmp_name */ 3448 3436 3449 - lockdep_assert_held(&memcg_cache_mutex); 3437 + BUG_ON(!memcg_can_account_kmem(memcg)); 3450 3438 3439 + mutex_lock(&mutex); 3451 3440 /* 3452 3441 * kmem_cache_create_memcg duplicates the given name and 3453 3442 * cgroup_name for this name requires RCU context. ··· 3459 3470 3460 3471 if (new) 3461 3472 new->allocflags |= __GFP_KMEMCG; 3473 + else 3474 + new = s; 3462 3475 3476 + mutex_unlock(&mutex); 3463 3477 return new; 3464 - } 3465 - 3466 - static struct kmem_cache *memcg_create_kmem_cache(struct mem_cgroup *memcg, 3467 - struct kmem_cache *cachep) 3468 - { 3469 - struct kmem_cache *new_cachep; 3470 - 3471 - BUG_ON(!memcg_can_account_kmem(memcg)); 3472 - 3473 - mutex_lock(&memcg_cache_mutex); 3474 - new_cachep = kmem_cache_dup(memcg, cachep); 3475 - if (new_cachep == NULL) 3476 - new_cachep = cachep; 3477 - mutex_unlock(&memcg_cache_mutex); 3478 - return new_cachep; 3479 3478 } 3480 3479 3481 3480 void kmem_cache_destroy_memcg_children(struct kmem_cache *s)