From: Li Zhong <zhong@linux.vnet.ibm.com>
To: Christoph Lameter <cl@linux.com>
Cc: LKML <linux-kernel@vger.kernel.org>,
Pekka Enberg <penberg@kernel.org>, linux-mm <linux-mm@kvack.org>,
Paul Mackerras <paulus@samba.org>, Matt Mackall <mpm@selenic.com>,
PowerPC email list <linuxppc-dev@lists.ozlabs.org>
Subject: Re: [PATCH powerpc 2/2] kfree the cache name of pgtable cache if SLUB is used
Date: Wed, 04 Jul 2012 17:00:20 +0800 [thread overview]
Message-ID: <1341392420.18505.41.camel@ThinkPad-T420> (raw)
In-Reply-To: <alpine.DEB.2.00.1207031535330.14703@router.home>
On Tue, 2012-07-03 at 15:36 -0500, Christoph Lameter wrote:
> Looking through the emails it seems that there is an issue with alias
> strings.
To be more precise, there seems no big issue currently. I just wanted to
make following usage of kmem_cache_create (SLUB) possible:
name = some string kmalloced
kmem_cache_create(name, ...)
kfree(name);
And from my understanding of the code, the saved_alias list, which is
used to keep track of the alias entries during early boot (slab_state <
SYSFS), is a blocker. It needs the name string to be valid until
slab_sysfs_init() is finished.
> That can be solved by duping the name of the slab earlier in kmem_cache_create().
> Does this patch fix the issue?
I'm afraid not...
With the patch below, we still need to kfree the duplicated name in
slab_sysfs_init().
And I think it would be easier to understand if we duplicate the name
string when creating one entry for saved_alias list, and kfree it when
we remove one entry from saved_alias list.
I'm not sure whether you got the patch #1 of the two I sent previously.
If not, would you kindly spend some time reviewing it to see if I missed
anything? Link below for your convenience:
https://lkml.org/lkml/2012/6/27/83
Btw, as Ben suggested, I'm now working on duplicating the name string in
SLAB to make them consistent, so we don't need the #ifdef CONFIG_SLUB
any more. Will send it out for your review after it is finished.
> Subject: slub: Dup name earlier in kmem_cache_create
>
> Dup the name earlier in kmem_cache_create so that alias
> processing is done using the copy of the string and not
> the string itself.
>
> Signed-off-by: Christoph Lameter <cl@linux.com>
>
> ---
> mm/slub.c | 29 ++++++++++++++---------------
> 1 file changed, 14 insertions(+), 15 deletions(-)
>
> Index: linux-2.6/mm/slub.c
> ===================================================================
> --- linux-2.6.orig/mm/slub.c 2012-06-11 08:49:56.000000000 -0500
> +++ linux-2.6/mm/slub.c 2012-07-03 15:17:37.000000000 -0500
> @@ -3933,8 +3933,12 @@ struct kmem_cache *kmem_cache_create(con
> if (WARN_ON(!name))
> return NULL;
>
> + n = kstrdup(name, GFP_KERNEL);
> + if (!n)
> + goto out;
> +
> down_write(&slub_lock);
> - s = find_mergeable(size, align, flags, name, ctor);
> + s = find_mergeable(size, align, flags, n, ctor);
> if (s) {
> s->refcount++;
> /*
> @@ -3944,7 +3948,7 @@ struct kmem_cache *kmem_cache_create(con
> s->objsize = max(s->objsize, (int)size);
> s->inuse = max_t(int, s->inuse, ALIGN(size, sizeof(void *)));
>
> - if (sysfs_slab_alias(s, name)) {
> + if (sysfs_slab_alias(s, n)) {
> s->refcount--;
> goto err;
> }
> @@ -3952,31 +3956,26 @@ struct kmem_cache *kmem_cache_create(con
> return s;
> }
>
> - n = kstrdup(name, GFP_KERNEL);
> - if (!n)
> - goto err;
> -
> s = kmalloc(kmem_size, GFP_KERNEL);
> if (s) {
> if (kmem_cache_open(s, n,
> size, align, flags, ctor)) {
> list_add(&s->list, &slab_caches);
> up_write(&slub_lock);
> - if (sysfs_slab_add(s)) {
> - down_write(&slub_lock);
> - list_del(&s->list);
> - kfree(n);
> - kfree(s);
> - goto err;
> - }
> - return s;
> + if (!sysfs_slab_add(s))
> + return s;
> +
> + down_write(&slub_lock);
> + list_del(&s->list);
> }
> kfree(s);
> }
> - kfree(n);
> +
> err:
> + kfree(n);
> up_write(&slub_lock);
>
> +out:
> if (flags & SLAB_PANIC)
> panic("Cannot create slabcache %s\n", name);
> else
>
WARNING: multiple messages have this Message-ID (diff)
From: Li Zhong <zhong@linux.vnet.ibm.com>
To: Christoph Lameter <cl@linux.com>
Cc: LKML <linux-kernel@vger.kernel.org>,
Pekka Enberg <penberg@kernel.org>, Matt Mackall <mpm@selenic.com>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Paul Mackerras <paulus@samba.org>, linux-mm <linux-mm@kvack.org>,
PowerPC email list <linuxppc-dev@lists.ozlabs.org>
Subject: Re: [PATCH powerpc 2/2] kfree the cache name of pgtable cache if SLUB is used
Date: Wed, 04 Jul 2012 17:00:20 +0800 [thread overview]
Message-ID: <1341392420.18505.41.camel@ThinkPad-T420> (raw)
In-Reply-To: <alpine.DEB.2.00.1207031535330.14703@router.home>
On Tue, 2012-07-03 at 15:36 -0500, Christoph Lameter wrote:
> Looking through the emails it seems that there is an issue with alias
> strings.
To be more precise, there seems no big issue currently. I just wanted to
make following usage of kmem_cache_create (SLUB) possible:
name = some string kmalloced
kmem_cache_create(name, ...)
kfree(name);
And from my understanding of the code, the saved_alias list, which is
used to keep track of the alias entries during early boot (slab_state <
SYSFS), is a blocker. It needs the name string to be valid until
slab_sysfs_init() is finished.
> That can be solved by duping the name of the slab earlier in kmem_cache_create().
> Does this patch fix the issue?
I'm afraid not...
With the patch below, we still need to kfree the duplicated name in
slab_sysfs_init().
And I think it would be easier to understand if we duplicate the name
string when creating one entry for saved_alias list, and kfree it when
we remove one entry from saved_alias list.
I'm not sure whether you got the patch #1 of the two I sent previously.
If not, would you kindly spend some time reviewing it to see if I missed
anything? Link below for your convenience:
https://lkml.org/lkml/2012/6/27/83
Btw, as Ben suggested, I'm now working on duplicating the name string in
SLAB to make them consistent, so we don't need the #ifdef CONFIG_SLUB
any more. Will send it out for your review after it is finished.
> Subject: slub: Dup name earlier in kmem_cache_create
>
> Dup the name earlier in kmem_cache_create so that alias
> processing is done using the copy of the string and not
> the string itself.
>
> Signed-off-by: Christoph Lameter <cl@linux.com>
>
> ---
> mm/slub.c | 29 ++++++++++++++---------------
> 1 file changed, 14 insertions(+), 15 deletions(-)
>
> Index: linux-2.6/mm/slub.c
> ===================================================================
> --- linux-2.6.orig/mm/slub.c 2012-06-11 08:49:56.000000000 -0500
> +++ linux-2.6/mm/slub.c 2012-07-03 15:17:37.000000000 -0500
> @@ -3933,8 +3933,12 @@ struct kmem_cache *kmem_cache_create(con
> if (WARN_ON(!name))
> return NULL;
>
> + n = kstrdup(name, GFP_KERNEL);
> + if (!n)
> + goto out;
> +
> down_write(&slub_lock);
> - s = find_mergeable(size, align, flags, name, ctor);
> + s = find_mergeable(size, align, flags, n, ctor);
> if (s) {
> s->refcount++;
> /*
> @@ -3944,7 +3948,7 @@ struct kmem_cache *kmem_cache_create(con
> s->objsize = max(s->objsize, (int)size);
> s->inuse = max_t(int, s->inuse, ALIGN(size, sizeof(void *)));
>
> - if (sysfs_slab_alias(s, name)) {
> + if (sysfs_slab_alias(s, n)) {
> s->refcount--;
> goto err;
> }
> @@ -3952,31 +3956,26 @@ struct kmem_cache *kmem_cache_create(con
> return s;
> }
>
> - n = kstrdup(name, GFP_KERNEL);
> - if (!n)
> - goto err;
> -
> s = kmalloc(kmem_size, GFP_KERNEL);
> if (s) {
> if (kmem_cache_open(s, n,
> size, align, flags, ctor)) {
> list_add(&s->list, &slab_caches);
> up_write(&slub_lock);
> - if (sysfs_slab_add(s)) {
> - down_write(&slub_lock);
> - list_del(&s->list);
> - kfree(n);
> - kfree(s);
> - goto err;
> - }
> - return s;
> + if (!sysfs_slab_add(s))
> + return s;
> +
> + down_write(&slub_lock);
> + list_del(&s->list);
> }
> kfree(s);
> }
> - kfree(n);
> +
> err:
> + kfree(n);
> up_write(&slub_lock);
>
> +out:
> if (flags & SLAB_PANIC)
> panic("Cannot create slabcache %s\n", name);
> else
>
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
WARNING: multiple messages have this Message-ID (diff)
From: Li Zhong <zhong@linux.vnet.ibm.com>
To: Christoph Lameter <cl@linux.com>
Cc: LKML <linux-kernel@vger.kernel.org>,
Pekka Enberg <penberg@kernel.org>, Matt Mackall <mpm@selenic.com>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Paul Mackerras <paulus@samba.org>, linux-mm <linux-mm@kvack.org>,
PowerPC email list <linuxppc-dev@lists.ozlabs.org>
Subject: Re: [PATCH powerpc 2/2] kfree the cache name of pgtable cache if SLUB is used
Date: Wed, 04 Jul 2012 17:00:20 +0800 [thread overview]
Message-ID: <1341392420.18505.41.camel@ThinkPad-T420> (raw)
In-Reply-To: <alpine.DEB.2.00.1207031535330.14703@router.home>
On Tue, 2012-07-03 at 15:36 -0500, Christoph Lameter wrote:
> Looking through the emails it seems that there is an issue with alias
> strings.
To be more precise, there seems no big issue currently. I just wanted to
make following usage of kmem_cache_create (SLUB) possible:
name = some string kmalloced
kmem_cache_create(name, ...)
kfree(name);
And from my understanding of the code, the saved_alias list, which is
used to keep track of the alias entries during early boot (slab_state <
SYSFS), is a blocker. It needs the name string to be valid until
slab_sysfs_init() is finished.
> That can be solved by duping the name of the slab earlier in kmem_cache_create().
> Does this patch fix the issue?
I'm afraid not...
With the patch below, we still need to kfree the duplicated name in
slab_sysfs_init().
And I think it would be easier to understand if we duplicate the name
string when creating one entry for saved_alias list, and kfree it when
we remove one entry from saved_alias list.
I'm not sure whether you got the patch #1 of the two I sent previously.
If not, would you kindly spend some time reviewing it to see if I missed
anything? Link below for your convenience:
https://lkml.org/lkml/2012/6/27/83
Btw, as Ben suggested, I'm now working on duplicating the name string in
SLAB to make them consistent, so we don't need the #ifdef CONFIG_SLUB
any more. Will send it out for your review after it is finished.
> Subject: slub: Dup name earlier in kmem_cache_create
>
> Dup the name earlier in kmem_cache_create so that alias
> processing is done using the copy of the string and not
> the string itself.
>
> Signed-off-by: Christoph Lameter <cl@linux.com>
>
> ---
> mm/slub.c | 29 ++++++++++++++---------------
> 1 file changed, 14 insertions(+), 15 deletions(-)
>
> Index: linux-2.6/mm/slub.c
> ===================================================================
> --- linux-2.6.orig/mm/slub.c 2012-06-11 08:49:56.000000000 -0500
> +++ linux-2.6/mm/slub.c 2012-07-03 15:17:37.000000000 -0500
> @@ -3933,8 +3933,12 @@ struct kmem_cache *kmem_cache_create(con
> if (WARN_ON(!name))
> return NULL;
>
> + n = kstrdup(name, GFP_KERNEL);
> + if (!n)
> + goto out;
> +
> down_write(&slub_lock);
> - s = find_mergeable(size, align, flags, name, ctor);
> + s = find_mergeable(size, align, flags, n, ctor);
> if (s) {
> s->refcount++;
> /*
> @@ -3944,7 +3948,7 @@ struct kmem_cache *kmem_cache_create(con
> s->objsize = max(s->objsize, (int)size);
> s->inuse = max_t(int, s->inuse, ALIGN(size, sizeof(void *)));
>
> - if (sysfs_slab_alias(s, name)) {
> + if (sysfs_slab_alias(s, n)) {
> s->refcount--;
> goto err;
> }
> @@ -3952,31 +3956,26 @@ struct kmem_cache *kmem_cache_create(con
> return s;
> }
>
> - n = kstrdup(name, GFP_KERNEL);
> - if (!n)
> - goto err;
> -
> s = kmalloc(kmem_size, GFP_KERNEL);
> if (s) {
> if (kmem_cache_open(s, n,
> size, align, flags, ctor)) {
> list_add(&s->list, &slab_caches);
> up_write(&slub_lock);
> - if (sysfs_slab_add(s)) {
> - down_write(&slub_lock);
> - list_del(&s->list);
> - kfree(n);
> - kfree(s);
> - goto err;
> - }
> - return s;
> + if (!sysfs_slab_add(s))
> + return s;
> +
> + down_write(&slub_lock);
> + list_del(&s->list);
> }
> kfree(s);
> }
> - kfree(n);
> +
> err:
> + kfree(n);
> up_write(&slub_lock);
>
> +out:
> if (flags & SLAB_PANIC)
> panic("Cannot create slabcache %s\n", name);
> else
>
next prev parent reply other threads:[~2012-07-04 9:00 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-06-25 9:53 [PATCH SLUB 1/2] duplicate the cache name in saved_alias list Li Zhong
2012-06-25 9:53 ` Li Zhong
2012-06-25 9:53 ` Li Zhong
2012-06-25 9:54 ` [PATCH powerpc 2/2] kfree the cache name of pgtable cache if SLUB is used Li Zhong
2012-06-25 9:54 ` Li Zhong
2012-06-25 9:54 ` Li Zhong
2012-06-29 0:45 ` Benjamin Herrenschmidt
2012-06-29 0:45 ` Benjamin Herrenschmidt
2012-06-29 0:45 ` Benjamin Herrenschmidt
2012-06-29 1:41 ` Zhong Li
2012-06-29 1:41 ` Zhong Li
2012-06-29 1:41 ` Zhong Li
2012-07-03 18:48 ` Christoph Lameter
2012-07-03 18:48 ` Christoph Lameter
2012-07-03 18:48 ` Christoph Lameter
2012-07-03 20:36 ` Christoph Lameter
2012-07-03 20:36 ` Christoph Lameter
2012-07-03 20:36 ` Christoph Lameter
2012-07-04 9:00 ` Li Zhong [this message]
2012-07-04 9:00 ` Li Zhong
2012-07-04 9:00 ` Li Zhong
2012-07-04 12:40 ` Glauber Costa
2012-07-04 12:40 ` Glauber Costa
2012-07-04 12:40 ` Glauber Costa
2012-07-05 1:41 ` Li Zhong
2012-07-05 1:41 ` Li Zhong
2012-07-05 1:41 ` Li Zhong
2012-07-05 8:23 ` Glauber Costa
2012-07-05 8:23 ` Glauber Costa
2012-07-05 8:23 ` Glauber Costa
2012-07-05 9:29 ` Li Zhong
2012-07-05 9:29 ` Li Zhong
2012-07-05 9:29 ` Li Zhong
2012-07-06 10:13 ` Glauber Costa
2012-07-06 10:13 ` Glauber Costa
2012-07-06 10:13 ` Glauber Costa
2012-07-09 1:48 ` Li Zhong
2012-07-09 1:48 ` Li Zhong
2012-07-09 1:48 ` Li Zhong
2012-06-25 10:54 ` [PATCH SLUB 1/2] duplicate the cache name in saved_alias list Wanlong Gao
2012-06-25 10:54 ` Wanlong Gao
2012-06-25 10:54 ` Wanlong Gao
2012-06-26 2:49 ` Li Zhong
2012-06-26 2:49 ` Li Zhong
2012-06-26 2:49 ` Li Zhong
2012-06-25 11:10 ` Glauber Costa
2012-06-25 11:10 ` Glauber Costa
2012-06-25 11:10 ` Glauber Costa
2012-06-26 2:58 ` Li Zhong
2012-06-26 2:58 ` Li Zhong
2012-06-26 2:58 ` Li Zhong
2012-06-27 7:53 ` [PATCH SLUB 1/2 v2] " Li Zhong
2012-06-27 7:53 ` Li Zhong
2012-06-27 7:53 ` Li Zhong
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=1341392420.18505.41.camel@ThinkPad-T420 \
--to=zhong@linux.vnet.ibm.com \
--cc=cl@linux.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mpm@selenic.com \
--cc=paulus@samba.org \
--cc=penberg@kernel.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.