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 <vdavy...@parallels.com> Cc: Johannes Weiner <han...@cmpxchg.org> Cc: Michal Hocko <mho...@suse.cz> Cc: Glauber Costa <glom...@gmail.com> Cc: Christoph Lameter <c...@linux-foundation.org> Cc: Pekka Enberg <penb...@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 _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel