summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mm/slab.c2
-rw-r--r--mm/slab.h5
-rw-r--r--mm/slab_common.c14
-rw-r--r--mm/slub.c2
4 files changed, 12 insertions, 11 deletions
diff --git a/mm/slab.c b/mm/slab.c
index 3521a351ceb5..badd98f7e2f1 100644
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -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 /*
diff --git a/mm/slab.h b/mm/slab.h
index 739099af6cbb..86f7ede21203 100644
--- a/mm/slab.h
+++ b/mm/slab.h
@@ -289,7 +289,7 @@ static __always_inline void memcg_uncharge_slab(struct page *page, int order,
289} 289}
290 290
291extern void slab_init_memcg_params(struct kmem_cache *); 291extern void slab_init_memcg_params(struct kmem_cache *);
292extern void memcg_link_cache(struct kmem_cache *s); 292extern void memcg_link_cache(struct kmem_cache *s, struct mem_cgroup *memcg);
293extern void slab_deactivate_memcg_cache_rcu_sched(struct kmem_cache *s, 293extern 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
347static inline void memcg_link_cache(struct kmem_cache *s) 347static 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
142static int init_memcg_params(struct kmem_cache *s, 142static 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
224void memcg_link_cache(struct kmem_cache *s) 223void 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
246static inline int init_memcg_params(struct kmem_cache *s, 246static 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);
398out: 398out:
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}
diff --git a/mm/slub.c b/mm/slub.c
index 5e217653286c..e1402ed19e74 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -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