diff options
Diffstat (limited to 'mm/slab_common.c')
-rw-r--r-- | mm/slab_common.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/mm/slab_common.c b/mm/slab_common.c index 3031badcc577..1c424b6511bf 100644 --- a/mm/slab_common.c +++ b/mm/slab_common.c | |||
@@ -81,6 +81,34 @@ static inline int kmem_cache_sanity_check(struct mem_cgroup *memcg, | |||
81 | } | 81 | } |
82 | #endif | 82 | #endif |
83 | 83 | ||
84 | #ifdef CONFIG_MEMCG_KMEM | ||
85 | int memcg_update_all_caches(int num_memcgs) | ||
86 | { | ||
87 | struct kmem_cache *s; | ||
88 | int ret = 0; | ||
89 | mutex_lock(&slab_mutex); | ||
90 | |||
91 | list_for_each_entry(s, &slab_caches, list) { | ||
92 | if (!is_root_cache(s)) | ||
93 | continue; | ||
94 | |||
95 | ret = memcg_update_cache_size(s, num_memcgs); | ||
96 | /* | ||
97 | * See comment in memcontrol.c, memcg_update_cache_size: | ||
98 | * Instead of freeing the memory, we'll just leave the caches | ||
99 | * up to this point in an updated state. | ||
100 | */ | ||
101 | if (ret) | ||
102 | goto out; | ||
103 | } | ||
104 | |||
105 | memcg_update_array_size(num_memcgs); | ||
106 | out: | ||
107 | mutex_unlock(&slab_mutex); | ||
108 | return ret; | ||
109 | } | ||
110 | #endif | ||
111 | |||
84 | /* | 112 | /* |
85 | * Figure out what the alignment of the objects will be given a set of | 113 | * Figure out what the alignment of the objects will be given a set of |
86 | * flags, a user specified alignment and the size of the objects. | 114 | * flags, a user specified alignment and the size of the objects. |