Messages in this thread Patch in this message | | | From | Vladimir Davydov <> | Subject | [PATCH RESEND -mm 12/12] slub: make sure all memcg caches have unique names on sysfs | Date | Thu, 13 Mar 2014 19:06:50 +0400 |
| |
Since memcg caches are now reparented on memcg offline, a memcg cache can outlive its cgroup. If the memcg id is then reused for a new cgroup with the same name, we can get cache name collision, which will result in failures while trying to add a sysfs entry for a new cgroup's cache. Let's fix this by appending the cache address to sysfs names of all memcg caches so that they are guaranteed to have unique names.
Signed-off-by: Vladimir Davydov <vdavydov@parallels.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Michal Hocko <mhocko@suse.cz> Cc: Glauber Costa <glommer@gmail.com> Cc: Christoph Lameter <cl@linux-foundation.org> Cc: Pekka Enberg <penberg@kernel.org> --- mm/slub.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/mm/slub.c b/mm/slub.c index 3ea91fb54f41..f5c74daeb46d 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -5236,7 +5236,18 @@ static int sysfs_slab_add(struct kmem_cache *s) } s->kobj.kset = cache_kset(s); - err = kobject_init_and_add(&s->kobj, &slab_ktype, NULL, "%s", name); + /* + * A memcg cache can outlive its cgroup. If the memcg id is then reused + * for a new cgroup with the same name, we can get cache name + * collision. To make sure all memcg caches have unique names on sysfs, + * we append the cache address to its name. + */ + if (is_root_cache(s)) + err = kobject_init_and_add(&s->kobj, &slab_ktype, + NULL, "%s", name); + else + err = kobject_init_and_add(&s->kobj, &slab_ktype, + NULL, "%s-%p", name, s); if (err) goto out_put_kobj; -- 1.7.10.4
| |