diff options
-rw-r--r-- | mm/slab.c | 2 | ||||
-rw-r--r-- | mm/slab.h | 5 | ||||
-rw-r--r-- | mm/slab_common.c | 14 | ||||
-rw-r--r-- | mm/slub.c | 2 |
4 files changed, 12 insertions, 11 deletions
@@ -1239,7 +1239,7 @@ void __init kmem_cache_init(void) | |||
1239 | nr_node_ids * sizeof(struct kmem_cache_node *), | 1239 | nr_node_ids * sizeof(struct kmem_cache_node *), |
1240 | SLAB_HWCACHE_ALIGN, 0, 0); | 1240 | SLAB_HWCACHE_ALIGN, 0, 0); |
1241 | list_add(&kmem_cache->list, &slab_caches); | 1241 | list_add(&kmem_cache->list, &slab_caches); |
1242 | memcg_link_cache(kmem_cache); | 1242 | memcg_link_cache(kmem_cache, NULL); |
1243 | slab_state = PARTIAL; | 1243 | slab_state = PARTIAL; |
1244 | 1244 | ||
1245 | /* | 1245 | /* |
@@ -289,7 +289,7 @@ static __always_inline void memcg_uncharge_slab(struct page *page, int order, | |||
289 | } | 289 | } |
290 | 290 | ||
291 | extern void slab_init_memcg_params(struct kmem_cache *); | 291 | extern void slab_init_memcg_params(struct kmem_cache *); |
292 | extern void memcg_link_cache(struct kmem_cache *s); | 292 | extern void memcg_link_cache(struct kmem_cache *s, struct mem_cgroup *memcg); |
293 | extern void slab_deactivate_memcg_cache_rcu_sched(struct kmem_cache *s, | 293 | extern void slab_deactivate_memcg_cache_rcu_sched(struct kmem_cache *s, |
294 | void (*deact_fn)(struct kmem_cache *)); | 294 | void (*deact_fn)(struct kmem_cache *)); |
295 | 295 | ||
@@ -344,7 +344,8 @@ static inline void slab_init_memcg_params(struct kmem_cache *s) | |||
344 | { | 344 | { |
345 | } | 345 | } |
346 | 346 | ||
347 | static inline void memcg_link_cache(struct kmem_cache *s) | 347 | static inline void memcg_link_cache(struct kmem_cache *s, |
348 | struct mem_cgroup *memcg) | ||
348 | { | 349 | { |
349 | } | 350 | } |
350 | 351 | ||
diff --git a/mm/slab_common.c b/mm/slab_common.c index a09bb10aa026..07ee4189b40c 100644 --- a/mm/slab_common.c +++ b/mm/slab_common.c | |||
@@ -140,13 +140,12 @@ void slab_init_memcg_params(struct kmem_cache *s) | |||
140 | } | 140 | } |
141 | 141 | ||
142 | static int init_memcg_params(struct kmem_cache *s, | 142 | static int init_memcg_params(struct kmem_cache *s, |
143 | struct mem_cgroup *memcg, struct kmem_cache *root_cache) | 143 | struct kmem_cache *root_cache) |
144 | { | 144 | { |
145 | struct memcg_cache_array *arr; | 145 | struct memcg_cache_array *arr; |
146 | 146 | ||
147 | if (root_cache) { | 147 | if (root_cache) { |
148 | s->memcg_params.root_cache = root_cache; | 148 | s->memcg_params.root_cache = root_cache; |
149 | s->memcg_params.memcg = memcg; | ||
150 | INIT_LIST_HEAD(&s->memcg_params.children_node); | 149 | INIT_LIST_HEAD(&s->memcg_params.children_node); |
151 | INIT_LIST_HEAD(&s->memcg_params.kmem_caches_node); | 150 | INIT_LIST_HEAD(&s->memcg_params.kmem_caches_node); |
152 | return 0; | 151 | return 0; |
@@ -221,11 +220,12 @@ int memcg_update_all_caches(int num_memcgs) | |||
221 | return ret; | 220 | return ret; |
222 | } | 221 | } |
223 | 222 | ||
224 | void memcg_link_cache(struct kmem_cache *s) | 223 | void memcg_link_cache(struct kmem_cache *s, struct mem_cgroup *memcg) |
225 | { | 224 | { |
226 | if (is_root_cache(s)) { | 225 | if (is_root_cache(s)) { |
227 | list_add(&s->root_caches_node, &slab_root_caches); | 226 | list_add(&s->root_caches_node, &slab_root_caches); |
228 | } else { | 227 | } else { |
228 | s->memcg_params.memcg = memcg; | ||
229 | list_add(&s->memcg_params.children_node, | 229 | list_add(&s->memcg_params.children_node, |
230 | &s->memcg_params.root_cache->memcg_params.children); | 230 | &s->memcg_params.root_cache->memcg_params.children); |
231 | list_add(&s->memcg_params.kmem_caches_node, | 231 | list_add(&s->memcg_params.kmem_caches_node, |
@@ -244,7 +244,7 @@ static void memcg_unlink_cache(struct kmem_cache *s) | |||
244 | } | 244 | } |
245 | #else | 245 | #else |
246 | static inline int init_memcg_params(struct kmem_cache *s, | 246 | static inline int init_memcg_params(struct kmem_cache *s, |
247 | struct mem_cgroup *memcg, struct kmem_cache *root_cache) | 247 | struct kmem_cache *root_cache) |
248 | { | 248 | { |
249 | return 0; | 249 | return 0; |
250 | } | 250 | } |
@@ -384,7 +384,7 @@ static struct kmem_cache *create_cache(const char *name, | |||
384 | s->useroffset = useroffset; | 384 | s->useroffset = useroffset; |
385 | s->usersize = usersize; | 385 | s->usersize = usersize; |
386 | 386 | ||
387 | err = init_memcg_params(s, memcg, root_cache); | 387 | err = init_memcg_params(s, root_cache); |
388 | if (err) | 388 | if (err) |
389 | goto out_free_cache; | 389 | goto out_free_cache; |
390 | 390 | ||
@@ -394,7 +394,7 @@ static struct kmem_cache *create_cache(const char *name, | |||
394 | 394 | ||
395 | s->refcount = 1; | 395 | s->refcount = 1; |
396 | list_add(&s->list, &slab_caches); | 396 | list_add(&s->list, &slab_caches); |
397 | memcg_link_cache(s); | 397 | memcg_link_cache(s, memcg); |
398 | out: | 398 | out: |
399 | if (err) | 399 | if (err) |
400 | return ERR_PTR(err); | 400 | return ERR_PTR(err); |
@@ -997,7 +997,7 @@ struct kmem_cache *__init create_kmalloc_cache(const char *name, | |||
997 | 997 | ||
998 | create_boot_cache(s, name, size, flags, useroffset, usersize); | 998 | create_boot_cache(s, name, size, flags, useroffset, usersize); |
999 | list_add(&s->list, &slab_caches); | 999 | list_add(&s->list, &slab_caches); |
1000 | memcg_link_cache(s); | 1000 | memcg_link_cache(s, NULL); |
1001 | s->refcount = 1; | 1001 | s->refcount = 1; |
1002 | return s; | 1002 | return s; |
1003 | } | 1003 | } |
@@ -4199,7 +4199,7 @@ static struct kmem_cache * __init bootstrap(struct kmem_cache *static_cache) | |||
4199 | } | 4199 | } |
4200 | slab_init_memcg_params(s); | 4200 | slab_init_memcg_params(s); |
4201 | list_add(&s->list, &slab_caches); | 4201 | list_add(&s->list, &slab_caches); |
4202 | memcg_link_cache(s); | 4202 | memcg_link_cache(s, NULL); |
4203 | return s; | 4203 | return s; |
4204 | } | 4204 | } |
4205 | 4205 | ||