From: Christoph Lameter <cl@linux.com>
To: Pekka Enberg <penberg@kernel.org>
Cc: linux-mm@kvack.org, David Rientjes <rientjes@google.com>,
Matt Mackall <mpm@selenic.com>,
Glauber Costa <glommer@parallels.com>,
Joonsoo Kim <js1304@gmail.com>
Subject: Common 16/22] Move duping of slab name to slab_common.c
Date: Wed, 23 May 2012 15:34:49 -0500 [thread overview]
Message-ID: <20120523203514.119157823@linux.com> (raw)
In-Reply-To: <20120523203433.340661918@linux.com>
[-- Attachment #1: dup_name_in_common --]
[-- Type: text/plain, Size: 3064 bytes --]
Duping of the slabname has to be done by each slab. Moving this code
to slab_common avoids duplicate implementations.
With this patch we have common string handling for all slab allocators.
Strings passed to kmem_cache_create() are copied internally. Subsystems
can create temporary strings to create slab caches.
Slabs allocated in early states of bootstrap will never be freed (and those
can never be freed since they are essential to slab allocator operations).
During bootstrap we therefore do not have to worry about duping names.
Signed-off-by: Christoph Lameter <cl@linux.com>
---
mm/slab_common.c | 24 +++++++++++++++++-------
mm/slub.c | 5 -----
2 files changed, 17 insertions(+), 12 deletions(-)
Index: linux-2.6/mm/slab_common.c
===================================================================
--- linux-2.6.orig/mm/slab_common.c 2012-05-18 07:24:55.804077432 -0500
+++ linux-2.6/mm/slab_common.c 2012-05-18 07:34:32.288065496 -0500
@@ -53,6 +53,7 @@ struct kmem_cache *kmem_cache_create(con
unsigned long flags, void (*ctor)(void *))
{
struct kmem_cache *s = NULL;
+ char *n;
#ifdef CONFIG_DEBUG_VM
if (!name || in_interrupt() || size < sizeof(void *) ||
@@ -97,14 +98,22 @@ struct kmem_cache *kmem_cache_create(con
WARN_ON(strchr(name, ' ')); /* It confuses parsers */
#endif
- s = __kmem_cache_create(name, size, align, flags, ctor);
+ n = kstrdup(name, GFP_KERNEL);
+ if (!n)
+ goto oops;
- /*
- * Check if the slab has actually been created and if it was a
- * real instatiation. Aliases do not belong on the list
- */
- if (s && s->refcount == 1)
- list_add(&s->list, &slab_caches);
+ s = __kmem_cache_create(n, size, align, flags, ctor);
+
+ if (s) {
+ /*
+ * Check if the slab has actually been created and if it was a
+ * real instatiation. Aliases do not belong on the list
+ */
+ if (s->refcount == 1)
+ list_add(&s->list, &slab_caches);
+
+ } else
+ kfree(n);
oops:
mutex_unlock(&slab_mutex);
@@ -128,6 +137,7 @@ void kmem_cache_destroy(struct kmem_cach
if (s->flags & SLAB_DESTROY_BY_RCU)
rcu_barrier();
+ kfree(s->name);
kmem_cache_free(kmem_cache, s);
} else {
list_add(&s->list, &slab_caches);
Index: linux-2.6/mm/slub.c
===================================================================
--- linux-2.6.orig/mm/slub.c 2012-05-18 07:24:55.804077432 -0500
+++ linux-2.6/mm/slub.c 2012-05-18 07:29:07.284072212 -0500
@@ -3913,10 +3913,6 @@ struct kmem_cache *__kmem_cache_create(c
return s;
}
- n = kstrdup(name, GFP_KERNEL);
- if (!n)
- return NULL;
-
s = kmalloc(kmem_size, GFP_KERNEL);
if (s) {
if (kmem_cache_open(s, n,
@@ -3934,7 +3930,6 @@ struct kmem_cache *__kmem_cache_create(c
}
kfree(s);
}
- kfree(n);
return NULL;
}
--
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/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2012-05-23 20:35 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-05-23 20:34 Common 00/22] Sl[auo]b: Common functionality V3 Christoph Lameter
2012-05-23 20:34 ` Common 01/22] [slob] Define page struct fields used in mm_types.h Christoph Lameter
2012-05-31 21:14 ` David Rientjes
2012-06-01 13:30 ` JoonSoo Kim
2012-05-23 20:34 ` Common 03/22] [slob] Remove various small accessors Christoph Lameter
2012-05-31 21:19 ` David Rientjes
2012-06-01 13:29 ` JoonSoo Kim
2012-05-23 20:34 ` Common 05/22] [slab] Remove some accessors Christoph Lameter
2012-05-23 20:34 ` Common 06/22] Extract common fields from struct kmem_cache Christoph Lameter
2012-05-30 6:39 ` Pekka Enberg
2012-05-30 15:29 ` Christoph Lameter
2012-05-30 18:10 ` Christoph Lameter
2012-05-31 7:52 ` Pekka Enberg
2012-05-23 20:34 ` Common 07/22] Extract common code for kmem_cache_create() Christoph Lameter
2012-05-23 20:34 ` Common 08/22] Common definition for boot state of the slab allocators Christoph Lameter
2012-05-23 20:34 ` Common 09/22] Use a common mutex definition Christoph Lameter
2012-05-23 20:34 ` Common 10/22] Move kmem_cache_create mutex handling to common code Christoph Lameter
2012-05-23 20:34 ` Common 12/22] Extract a common function for kmem_cache_destroy Christoph Lameter
2012-05-23 20:34 ` Common 13/22] Always use the name "kmem_cache" for the slab cache with the kmem_cache structure Christoph Lameter
2012-05-23 20:34 ` Common 15/22] Get rid of __kmem_cache_destroy Christoph Lameter
2012-05-23 20:34 ` Christoph Lameter [this message]
2012-05-23 20:34 ` Common 17/22] Do slab aliasing call from common code Christoph Lameter
2012-05-23 20:34 ` Common 19/22] Do not pass ctor to __kmem_cache_create() Christoph Lameter
2012-05-23 20:34 ` Common 20/22] Set parameters on kmem_cache instead of passing them to functions Christoph Lameter
2012-05-23 20:34 ` Common 21/22] Common alignment code Christoph Lameter
2012-05-23 20:34 ` Common 22/22] Common object size alignment Christoph Lameter
2012-05-30 6:28 ` Common 00/22] Sl[auo]b: Common functionality V3 Pekka Enberg
[not found] ` <20120523203506.170219003@linux.com>
2012-05-31 21:15 ` Common 02/22] [slob] No need to zero mapping since it is no longer in use David Rientjes
2012-06-01 13:30 ` JoonSoo Kim
[not found] ` <20120523203507.324764286@linux.com>
2012-05-31 21:23 ` Common 04/22] [slab] Use page struct fields instead of casting David Rientjes
2012-06-01 13:17 ` JoonSoo Kim
2012-06-01 14:00 ` Christoph Lameter
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=20120523203514.119157823@linux.com \
--to=cl@linux.com \
--cc=glommer@parallels.com \
--cc=js1304@gmail.com \
--cc=linux-mm@kvack.org \
--cc=mpm@selenic.com \
--cc=penberg@kernel.org \
--cc=rientjes@google.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox