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@xxxxxxxxxxxxx> Cc: Johannes Weiner <hannes@xxxxxxxxxxx> Cc: Michal Hocko <mhocko@xxxxxxx> Cc: Glauber Costa <glommer@xxxxxxxxx> Cc: Christoph Lameter <cl@xxxxxxxxxxxxxxxxxxxx> Cc: Pekka Enberg <penberg@xxxxxxxxxx> --- 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 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>