All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hyeonggon Yoo <42.hyeyoo@gmail.com>
To: Rasmus Villemoes <linux@rasmusvillemoes.dk>
Cc: Christoph Lameter <cl@linux.com>,
	Pekka Enberg <penberg@kernel.org>,
	David Rientjes <rientjes@google.com>,
	Joonsoo Kim <iamjoonsoo.kim@lge.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Vlastimil Babka <vbabka@suse.cz>,
	Roman Gushchin <roman.gushchin@linux.dev>,
	linux-mm@kvack.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] mm: slub: remove dead and buggy code from sysfs_slab_add()
Date: Thu, 6 Oct 2022 15:20:57 +0900	[thread overview]
Message-ID: <Yz5zyRK1XfKfFITD@hyeyoo> (raw)
In-Reply-To: <dfa55d7d-4063-c249-f6b8-e7b7d2efc8cc@rasmusvillemoes.dk>

On Mon, Oct 03, 2022 at 11:38:30AM +0200, Rasmus Villemoes wrote:
> On 03/10/2022 09.02, Hyeonggon Yoo wrote:
> > On Fri, Sep 30, 2022 at 10:47:42AM +0200, Rasmus Villemoes wrote:
> >> The function sysfs_slab_add() has two callers:
> >>
> >> One is slab_sysfs_init(), which first initializes slab_kset, and only
> >> when that succeeds sets slab_state to FULL, and then proceeds to call
> >> sysfs_slab_add() for all previously created slabs.
> >>
> >> The other is __kmem_cache_create(), but only after a
> >>
> >> 	if (slab_state <= UP)
> >> 		return 0;
> >>
> >> check.
> >>
> >> So in other words, sysfs_slab_add() is never called without
> >> slab_kset (aka the return value of cache_kset()) being non-NULL.
> >>
> >> And this is just as well, because if we ever did take this path and
> >> called kobject_init(&s->kobj), and then later when called again from
> >> slab_sysfs_init() would end up calling kobject_init_and_add(), we
> >> would hit
> >>
> >> 	if (kobj->state_initialized) {
> >> 		/* do not error out as sometimes we can recover */
> >> 		pr_err("kobject (%p): tried to init an initialized object, something is seriously wrong.\n",
> >> 		dump_stack();
> >> 	}
> >>
> >> in kobject.c.
> >>
> >> Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
> >> ---
> >>  mm/slub.c | 5 -----
> >>  1 file changed, 5 deletions(-)
> >>
> >> diff --git a/mm/slub.c b/mm/slub.c
> >> index 4b98dff9be8e..04a7f75a7b1f 100644
> >> --- a/mm/slub.c
> >> +++ b/mm/slub.c
> >> @@ -5937,11 +5937,6 @@ static int sysfs_slab_add(struct kmem_cache *s)
> >>  	struct kset *kset = cache_kset(s);
> >>  	int unmergeable = slab_unmergeable(s);
> >>  
> >> -	if (!kset) {
> >> -		kobject_init(&s->kobj, &slab_ktype);
> >> -		return 0;
> >> -	}
> >> -
> >>  	if (!unmergeable && disable_higher_order_debug &&
> >>  			(slub_debug & DEBUG_METADATA_FLAGS))
> >>  		unmergeable = 1;
> >> -- 
> >> 2.37.2
> > 
> > I assumed that it's hit when SLUB failed to initialize slab_kset in
> > slab_sysfs_init(). (Yeah, it is too unlikely, though....)
> 
> No, it is not, because if the creation of slab_kset fails,
> slab_sysfs_init() returns early, and hence slab_state never transitions
> to FULL.

Yeah, you are right ;-) I misread that.

> I don't see anywhere else where slab_state could become FULL
> (of course in slab.c and slob.c, but those are not built when slub.c
> is), so I do believe my analysis in the commit log is correct.

Right.

> > And obviously it's a bug if sysfs_slab_add() is called early than
> > slab_sysfs_init().
> 
> Yes, and that's already what the existing slab_state check guards.
> 
> Rasmus

Looks good to me,
Reviewed-by: Hyeonggon Yoo <42.hyeyoo@gmail.com>

Thanks!

-- 
Thanks,
Hyeonggon


  reply	other threads:[~2022-10-06  6:21 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-30  8:47 [PATCH] mm: slub: remove dead and buggy code from sysfs_slab_add() Rasmus Villemoes
2022-10-03  7:02 ` Hyeonggon Yoo
2022-10-03  9:38   ` Rasmus Villemoes
2022-10-06  6:20     ` Hyeonggon Yoo [this message]
2022-10-10  3:54 ` David Rientjes
2022-10-14  8:15 ` 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=Yz5zyRK1XfKfFITD@hyeyoo \
    --to=42.hyeyoo@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=cl@linux.com \
    --cc=iamjoonsoo.kim@lge.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux@rasmusvillemoes.dk \
    --cc=penberg@kernel.org \
    --cc=rientjes@google.com \
    --cc=roman.gushchin@linux.dev \
    --cc=vbabka@suse.cz \
    /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.