From: Harry Yoo <harry.yoo@oracle.com>
To: Matthew Wilcox <willy@infradead.org>
Cc: Johannes Weiner <hannes@cmpxchg.org>,
Vlastimil Babka <vbabka@suse.cz>,
Andrew Morton <akpm@linux-foundation.org>,
Christoph Lameter <cl@gentwo.org>,
David Rientjes <rientjes@google.com>,
Roman Gushchin <roman.gushchin@linux.dev>,
linux-mm@kvack.org, Michal Hocko <mhocko@kernel.org>,
Shakeel Butt <shakeel.butt@linux.dev>,
Muchun Song <muchun.song@linux.dev>,
cgroups@vger.kernel.org
Subject: Re: [PATCH v4 14/16] memcg: Convert mem_cgroup_from_obj_folio() to mem_cgroup_from_obj_slab()
Date: Mon, 24 Nov 2025 15:44:12 +0900 [thread overview]
Message-ID: <aSP-vNXOhsmMrWNk@hyeyoo> (raw)
In-Reply-To: <aRYJzbZpd-UP3jh9@casper.infradead.org>
On Thu, Nov 13, 2025 at 04:39:41PM +0000, Matthew Wilcox wrote:
> On Thu, Nov 13, 2025 at 11:14:24AM -0500, Johannes Weiner wrote:
> > On Thu, Nov 13, 2025 at 12:09:28AM +0000, Matthew Wilcox (Oracle) wrote:
> > > - /*
> > > - * folio_memcg_check() is used here, because in theory we can encounter
> > > - * a folio where the slab flag has been cleared already, but
> > > - * slab->obj_exts has not been freed yet
> > > - * folio_memcg_check() will guarantee that a proper memory
> > > - * cgroup pointer or NULL will be returned.
> > > - */
> > > - return folio_memcg_check(folio);
> > > + off = obj_to_index(slab->slab_cache, slab, p);
> > > + if (obj_exts[off].objcg)
> > > + return obj_cgroup_memcg(obj_exts[off].objcg);
> > > +
> > > + return NULL;
> > > }
> > >
> > > /*
> > > @@ -2637,7 +2627,7 @@ struct mem_cgroup *mem_cgroup_from_slab_obj(void *p)
> > > if (mem_cgroup_disabled())
> > > return NULL;
> > >
> > > - return mem_cgroup_from_obj_folio(virt_to_folio(p), p);
> > > + return mem_cgroup_from_obj_slab(virt_to_slab(p), p);
> >
> > The name undoubtedly sucks, but there is a comment above this function
> > that this can be used on non-slab kernel pages as well.
>
> Oh, I see. Usercopy calls this kind of thing 'heap object', so
> perhaps eventually rename this function to mem_cgroup_from_heap_obj()?
>
> > E.g. !vmap kernel stack pages -> mod_lruvec_kmem_state -> mem_cgroup_from_obj_slab
>
> That actually seems to be the only user ... and I wasn't testing on a
> !VMAP_STACK build, so I wouldn't've caught it.
>
> > How about:
> >
> > if ((slab = virt_to_slap(p)))
> > return mem_cgroup_from_obj_slab(slab, p);
> > return folio_memcg_check(virt_to_folio(p), p);
>
> Mild updates, here's my counteroffer:
>
> commit 6ca8243530e4
> Author: Matthew Wilcox (Oracle) <willy@infradead.org>
> Date: Thu Nov 13 11:30:59 2025 -0500
>
> fix-memcg-slab
With this folded,
Reviewed-by: Harry Yoo <harry.yoo@oracle.com>
--
Cheers,
Harry / Hyeonggon
> diff --git a/mm/memcontrol.c b/mm/memcontrol.c
> index 597673e272a9..a2e6f409c5e8 100644
> --- a/mm/memcontrol.c
> +++ b/mm/memcontrol.c
> @@ -2599,9 +2599,6 @@ struct mem_cgroup *mem_cgroup_from_obj_slab(struct slab *slab, void *p)
> struct slabobj_ext *obj_exts;
> unsigned int off;
>
> - if (!slab)
> - return NULL;
> -
> obj_exts = slab_obj_exts(slab);
> if (!obj_exts)
> return NULL;
> @@ -2624,10 +2621,15 @@ struct mem_cgroup *mem_cgroup_from_obj_slab(struct slab *slab, void *p)
> */
> struct mem_cgroup *mem_cgroup_from_slab_obj(void *p)
> {
> + struct slab *slab;
> +
> if (mem_cgroup_disabled())
> return NULL;
>
> - return mem_cgroup_from_obj_slab(virt_to_slab(p), p);
> + slab = virt_to_slab(p);
> + if (slab)
> + return mem_cgroup_from_obj_slab(slab, p);
> + return folio_memcg_check(virt_to_folio(p));
> }
>
> static struct obj_cgroup *__get_obj_cgroup_from_memcg(struct mem_cgroup *memcg)
next prev parent reply other threads:[~2025-11-24 6:45 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-13 0:09 [PATCH v4 00/16] Prepare slab for memdescs Matthew Wilcox (Oracle)
2025-11-13 0:09 ` [PATCH v4 01/16] slab: Reimplement page_slab() Matthew Wilcox (Oracle)
2025-11-13 12:31 ` David Hildenbrand (Red Hat)
2025-11-13 14:02 ` Marco Elver
2025-11-24 2:03 ` Harry Yoo
2025-11-13 0:09 ` [PATCH v4 02/16] slab: Remove folio references from __ksize() Matthew Wilcox (Oracle)
2025-11-13 12:32 ` David Hildenbrand (Red Hat)
2025-11-24 2:31 ` Harry Yoo
2025-11-24 4:28 ` Matthew Wilcox
2025-11-24 5:18 ` Harry Yoo
2025-11-13 0:09 ` [PATCH v4 03/16] slab: Remove folio references in memcg_slab_post_charge() Matthew Wilcox (Oracle)
2025-11-13 0:09 ` [PATCH v4 04/16] slab: Remove folio references in slab alloc/free Matthew Wilcox (Oracle)
2025-11-13 0:09 ` [PATCH v4 05/16] slab: Remove folio references from ___kmalloc_large_node() Matthew Wilcox (Oracle)
2025-11-13 0:09 ` [PATCH v4 06/16] slab: Remove folio references from free_large_kmalloc() Matthew Wilcox (Oracle)
2025-11-13 0:09 ` [PATCH v4 07/16] slab: Remove folio references from kvfree_rcu_cb() Matthew Wilcox (Oracle)
2025-11-24 5:22 ` Harry Yoo
2025-11-13 0:09 ` [PATCH v4 08/16] slab: Remove folio references from kfree() Matthew Wilcox (Oracle)
2025-11-24 5:39 ` Harry Yoo
2025-11-24 13:53 ` Matthew Wilcox
2025-11-13 0:09 ` [PATCH v4 09/16] slab: Remove folio references from __do_krealloc() Matthew Wilcox (Oracle)
2025-11-24 5:55 ` Harry Yoo
2025-11-13 0:09 ` [PATCH v4 10/16] slab: Remove folio references from build_detached_freelist() Matthew Wilcox (Oracle)
2025-11-24 5:55 ` Harry Yoo
2025-11-13 0:09 ` [PATCH v4 11/16] slab: Remove folio references from kfree_rcu_sheaf() Matthew Wilcox (Oracle)
2025-11-24 5:58 ` Harry Yoo
2025-11-13 0:09 ` [PATCH v4 12/16] slab: Remove folio references from kfree_nolock() Matthew Wilcox (Oracle)
2025-11-24 5:59 ` Harry Yoo
2025-11-13 0:09 ` [PATCH v4 13/16] usercopy: Remove folio references from check_heap_object() Matthew Wilcox (Oracle)
2025-11-24 6:14 ` Harry Yoo
2025-11-24 21:06 ` Kees Cook
2025-11-13 0:09 ` [PATCH v4 14/16] memcg: Convert mem_cgroup_from_obj_folio() to mem_cgroup_from_obj_slab() Matthew Wilcox (Oracle)
2025-11-13 16:14 ` Johannes Weiner
2025-11-13 16:28 ` Vlastimil Babka
2025-11-13 19:42 ` Shakeel Butt
2025-11-13 20:33 ` Matthew Wilcox
2025-11-13 21:54 ` Shakeel Butt
2025-11-13 16:39 ` Matthew Wilcox
2025-11-13 19:16 ` Johannes Weiner
2025-11-13 19:26 ` Vlastimil Babka
2025-11-24 6:44 ` Harry Yoo [this message]
2025-11-13 0:09 ` [PATCH v4 15/16] kasan: Remove references to folio in __kasan_mempool_poison_object() Matthew Wilcox (Oracle)
2025-11-24 7:02 ` Harry Yoo
2025-11-13 0:09 ` [PATCH v4 16/16] slab: Remove references to folios from virt_to_slab() Matthew Wilcox (Oracle)
2025-11-24 7:09 ` Harry Yoo
2025-11-24 14:12 ` Matthew Wilcox
2025-11-13 11:28 ` [PATCH v4 00/16] Prepare slab for memdescs Vlastimil Babka
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aSP-vNXOhsmMrWNk@hyeyoo \
--to=harry.yoo@oracle.com \
--cc=akpm@linux-foundation.org \
--cc=cgroups@vger.kernel.org \
--cc=cl@gentwo.org \
--cc=hannes@cmpxchg.org \
--cc=linux-mm@kvack.org \
--cc=mhocko@kernel.org \
--cc=muchun.song@linux.dev \
--cc=rientjes@google.com \
--cc=roman.gushchin@linux.dev \
--cc=shakeel.butt@linux.dev \
--cc=vbabka@suse.cz \
--cc=willy@infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.