mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 19:51:31 -04:00
slab: link memcg caches of the same kind into a list
Sometimes, we need to iterate over all memcg copies of a particular root kmem cache. Currently, we use memcg_cache_params->memcg_caches array for that, because it contains all existing memcg caches. However, it's a bad practice to keep all caches, including those that belong to offline cgroups, in this array, because it will be growing beyond any bounds then. I'm going to wipe away dead caches from it to save space. To still be able to perform iterations over all memcg caches of the same kind, let us link them into a list. Signed-off-by: Vladimir Davydov <[email protected]> Cc: Johannes Weiner <[email protected]> Cc: Michal Hocko <[email protected]> Cc: Tejun Heo <[email protected]> Cc: Christoph Lameter <[email protected]> Cc: Pekka Enberg <[email protected]> Cc: David Rientjes <[email protected]> Cc: Joonsoo Kim <[email protected]> Cc: Dave Chinner <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
parent
f7ce3190c4
commit
426589f571
5 changed files with 41 additions and 33 deletions
17
mm/slab.h
17
mm/slab.h
|
|
@ -163,6 +163,18 @@ ssize_t slabinfo_write(struct file *file, const char __user *buffer,
|
|||
size_t count, loff_t *ppos);
|
||||
|
||||
#ifdef CONFIG_MEMCG_KMEM
|
||||
/*
|
||||
* Iterate over all memcg caches of the given root cache. The caller must hold
|
||||
* slab_mutex.
|
||||
*/
|
||||
#define for_each_memcg_cache(iter, root) \
|
||||
list_for_each_entry(iter, &(root)->memcg_params.list, \
|
||||
memcg_params.list)
|
||||
|
||||
#define for_each_memcg_cache_safe(iter, tmp, root) \
|
||||
list_for_each_entry_safe(iter, tmp, &(root)->memcg_params.list, \
|
||||
memcg_params.list)
|
||||
|
||||
static inline bool is_root_cache(struct kmem_cache *s)
|
||||
{
|
||||
return s->memcg_params.is_root_cache;
|
||||
|
|
@ -241,6 +253,11 @@ extern void slab_init_memcg_params(struct kmem_cache *);
|
|||
|
||||
#else /* !CONFIG_MEMCG_KMEM */
|
||||
|
||||
#define for_each_memcg_cache(iter, root) \
|
||||
for ((void)(iter), (void)(root); 0; )
|
||||
#define for_each_memcg_cache_safe(iter, tmp, root) \
|
||||
for ((void)(iter), (void)(tmp), (void)(root); 0; )
|
||||
|
||||
static inline bool is_root_cache(struct kmem_cache *s)
|
||||
{
|
||||
return true;
|
||||
|
|
|
|||
Loading…
Reference in a new issue