On Fri 18-04-14 13:08:17, Andrew Morton wrote: [...] > From: Vladimir Davydov <vdavydov@xxxxxxxxxxxxx> > Subject: slub: fix memcg_propagate_slab_attrs > > After creating a cache for a memcg we should initialize its sysfs attrs > with the values from its parent. That's what memcg_propagate_slab_attrs > is for. Currently it's broken - we clearly muddled root-vs-memcg caches > there. Let's fix it up. Andrew didn't so I'll do. What is the effect of the mismatch? I am really drowning in that code... > Signed-off-by: Vladimir Davydov <vdavydov@xxxxxxxxxxxxx> > Cc: Christoph Lameter <cl@xxxxxxxxx> > Cc: Pekka Enberg <penberg@xxxxxxxxxx> > Cc: Michal Hocko <mhocko@xxxxxxx> > Cc: Johannes Weiner <hannes@xxxxxxxxxxx> > Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> > --- > > mm/slub.c | 11 +++++++---- > 1 file changed, 7 insertions(+), 4 deletions(-) > > diff -puN mm/slub.c~slub-fix-memcg_propagate_slab_attrs mm/slub.c > --- a/mm/slub.c~slub-fix-memcg_propagate_slab_attrs > +++ a/mm/slub.c > @@ -5071,15 +5071,18 @@ static void memcg_propagate_slab_attrs(s > #ifdef CONFIG_MEMCG_KMEM > int i; > char *buffer = NULL; > + struct kmem_cache *root_cache; > > - if (!is_root_cache(s)) > + if (is_root_cache(s)) > return; > > + root_cache = s->memcg_params->root_cache; > + > /* > * This mean this cache had no attribute written. Therefore, no point > * in copying default values around > */ > - if (!s->max_attr_size) > + if (!root_cache->max_attr_size) > return; > > for (i = 0; i < ARRAY_SIZE(slab_attrs); i++) { > @@ -5101,7 +5104,7 @@ static void memcg_propagate_slab_attrs(s > */ > if (buffer) > buf = buffer; > - else if (s->max_attr_size < ARRAY_SIZE(mbuf)) > + else if (root_cache->max_attr_size < ARRAY_SIZE(mbuf)) > buf = mbuf; > else { > buffer = (char *) get_zeroed_page(GFP_KERNEL); > @@ -5110,7 +5113,7 @@ static void memcg_propagate_slab_attrs(s > buf = buffer; > } > > - attr->show(s->memcg_params->root_cache, buf); > + attr->show(root_cache, buf); > attr->store(s, buf, strlen(buf)); > } > > _ > > Patches currently in -mm which might be from vdavydov@xxxxxxxxxxxxx are > > slub-fix-memcg_propagate_slab_attrs.patch > slb-charge-slabs-to-kmemcg-explicitly.patch > mm-get-rid-of-__gfp_kmemcg.patch > mm-get-rid-of-__gfp_kmemcg-fix.patch > slab-document-kmalloc_order.patch > -- Michal Hocko SUSE Labs -- 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>