From: Christoph Lameter <cl@linux.com>
To: Pekka Enberg <penberg@kernel.org>
Cc: Joonsoo Kim <js1304@gmail.com>,
David Rientjes <rientjes@google.com>,
Glauber Costa <glommer@parallels.com>,
linux-mm@kvack.org
Subject: C14 [03/14] Improve error handling in kmem_cache_create
Date: Wed, 5 Sep 2012 00:20:33 +0000 [thread overview]
Message-ID: <0000013993ccbf50-814ada10-2cc1-4729-b312-d13bf8392174-000000@email.amazonses.com> (raw)
In-Reply-To: <20120904230609.691088980@linux.com>
Instead of using s == NULL use an errorcode. This allows much more
detailed diagnostics as to what went wrong. As we add more functionality
from the slab allocators to the common kmem_cache_create() function we will
also add more error conditions.
Print the error code during the panic as well as in a warning if the module
can handle failure. The API for kmem_cache_create() currently does not allow
the returning of an error code. Return NULL but log the cause of the problem
in the syslog.
Reviewed-by: Glauber Costa <glommer@parallels.com>
Acked-by: David Rientjes <rientjes@google.com>
Signed-off-by: Christoph Lameter <cl@linux.com>
---
mm/slab_common.c | 30 +++++++++++++++++++++++++-----
1 file changed, 25 insertions(+), 5 deletions(-)
Index: linux/mm/slab_common.c
===================================================================
--- linux.orig/mm/slab_common.c 2012-09-04 18:00:13.098023913 -0500
+++ linux/mm/slab_common.c 2012-09-04 18:01:59.755688501 -0500
@@ -98,16 +98,36 @@ struct kmem_cache *kmem_cache_create(con
unsigned long flags, void (*ctor)(void *))
{
struct kmem_cache *s = NULL;
+ int err = 0;
get_online_cpus();
mutex_lock(&slab_mutex);
- if (kmem_cache_sanity_check(name, size) == 0)
- s = __kmem_cache_create(name, size, align, flags, ctor);
+
+ if (!kmem_cache_sanity_check(name, size) == 0)
+ goto out_locked;
+
+
+ s = __kmem_cache_create(name, size, align, flags, ctor);
+ if (!s)
+ err = -ENOSYS; /* Until __kmem_cache_create returns code */
+
+out_locked:
mutex_unlock(&slab_mutex);
put_online_cpus();
- if (!s && (flags & SLAB_PANIC))
- panic("kmem_cache_create: Failed to create slab '%s'\n", name);
+ if (err) {
+
+ if (flags & SLAB_PANIC)
+ panic("kmem_cache_create: Failed to create slab '%s'. Error %d\n",
+ name, err);
+ else {
+ printk(KERN_WARNING "kmem_cache_create(%s) failed with error %d",
+ name, err);
+ dump_stack();
+ }
+
+ return NULL;
+ }
return s;
}
--
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>
next prev parent reply other threads:[~2012-09-05 0:20 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20120904230609.691088980@linux.com>
2012-09-04 23:06 ` C14 [02/14] slub: Use kmem_cache for the kmem_cache structure Christoph Lameter
2012-09-04 23:06 ` C14 [01/14] [PATCH 10/28] slub: Add debugging to verify correct cache use on kmem_cache_free() Christoph Lameter
2012-09-04 23:18 ` C14 [05/14] Extract a common function for kmem_cache_destroy Christoph Lameter
2012-09-04 23:18 ` C14 [09/14] Move duping of slab name to slab_common.c Christoph Lameter
2012-09-04 23:18 ` C14 [13/14] Shrink __kmem_cache_create() parameter lists Christoph Lameter
2012-09-04 23:38 ` C14 [04/14] Move list_add() to slab_common.c Christoph Lameter
2012-09-04 23:38 ` C14 [14/14] [PATCH 23/28] Move kmem_cache refcounting to common code Christoph Lameter
2012-09-04 23:38 ` C14 [08/14] Get rid of __kmem_cache_destroy Christoph Lameter
2012-09-05 0:18 ` C14 [10/14] Do slab aliasing call from common code Christoph Lameter
2012-09-05 0:18 ` C14 [11/14] Move sysfs_slab_add to common Christoph Lameter
2012-09-05 0:18 ` C14 [07/14] Move freeing of kmem_cache structure to common code Christoph Lameter
2012-09-05 0:20 ` Christoph Lameter [this message]
2012-09-05 0:20 ` C14 [06/14] Always use the name "kmem_cache" for the slab cache with the kmem_cache structure Christoph Lameter
2012-09-05 0:20 ` C14 [12/14] Move kmem_cache allocations into common code 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=0000013993ccbf50-814ada10-2cc1-4729-b312-d13bf8392174-000000@email.amazonses.com \
--to=cl@linux.com \
--cc=glommer@parallels.com \
--cc=js1304@gmail.com \
--cc=linux-mm@kvack.org \
--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