aboutsummaryrefslogtreecommitdiffstats
path: root/mm/slub.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/slub.c')
-rw-r--r--mm/slub.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/mm/slub.c b/mm/slub.c
index 33939e72bc37..3508edec19f9 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -5138,6 +5138,15 @@ static const struct kset_uevent_ops slab_uevent_ops = {
5138 5138
5139static struct kset *slab_kset; 5139static struct kset *slab_kset;
5140 5140
5141static inline struct kset *cache_kset(struct kmem_cache *s)
5142{
5143#ifdef CONFIG_MEMCG_KMEM
5144 if (!is_root_cache(s))
5145 return s->memcg_params->root_cache->memcg_kset;
5146#endif
5147 return slab_kset;
5148}
5149
5141#define ID_STR_LENGTH 64 5150#define ID_STR_LENGTH 64
5142 5151
5143/* Create a unique string id for a slab cache: 5152/* Create a unique string id for a slab cache:
@@ -5203,7 +5212,7 @@ static int sysfs_slab_add(struct kmem_cache *s)
5203 name = create_unique_id(s); 5212 name = create_unique_id(s);
5204 } 5213 }
5205 5214
5206 s->kobj.kset = slab_kset; 5215 s->kobj.kset = cache_kset(s);
5207 err = kobject_init_and_add(&s->kobj, &slab_ktype, NULL, "%s", name); 5216 err = kobject_init_and_add(&s->kobj, &slab_ktype, NULL, "%s", name);
5208 if (err) { 5217 if (err) {
5209 kobject_put(&s->kobj); 5218 kobject_put(&s->kobj);
@@ -5216,6 +5225,18 @@ static int sysfs_slab_add(struct kmem_cache *s)
5216 kobject_put(&s->kobj); 5225 kobject_put(&s->kobj);
5217 return err; 5226 return err;
5218 } 5227 }
5228
5229#ifdef CONFIG_MEMCG_KMEM
5230 if (is_root_cache(s)) {
5231 s->memcg_kset = kset_create_and_add("cgroup", NULL, &s->kobj);
5232 if (!s->memcg_kset) {
5233 kobject_del(&s->kobj);
5234 kobject_put(&s->kobj);
5235 return -ENOMEM;
5236 }
5237 }
5238#endif
5239
5219 kobject_uevent(&s->kobj, KOBJ_ADD); 5240 kobject_uevent(&s->kobj, KOBJ_ADD);
5220 if (!unmergeable) { 5241 if (!unmergeable) {
5221 /* Setup first alias */ 5242 /* Setup first alias */
@@ -5234,6 +5255,9 @@ static void sysfs_slab_remove(struct kmem_cache *s)
5234 */ 5255 */
5235 return; 5256 return;
5236 5257
5258#ifdef CONFIG_MEMCG_KMEM
5259 kset_unregister(s->memcg_kset);
5260#endif
5237 kobject_uevent(&s->kobj, KOBJ_REMOVE); 5261 kobject_uevent(&s->kobj, KOBJ_REMOVE);
5238 kobject_del(&s->kobj); 5262 kobject_del(&s->kobj);
5239 kobject_put(&s->kobj); 5263 kobject_put(&s->kobj);