2009-09-30 04:42:30

by David Rientjes

[permalink] [raw]
Subject: [patch] slqb: remove unnecessary conditional in kmem_cache_create

kmem_cache_open() panics when a SLAB_PANIC cache cannot be opened because
it has early callers using the flag that do not go through
kmem_cache_create().

If kmem_cache_open() fails for a SLAB_PANIC cache, it would have panicked
the machine. Thus, checking for this flag in kmem_cache_create() is
unnecessary in the error patch since it is always clear.

Cc: Nick Piggin <[email protected]>
Signed-off-by: David Rientjes <[email protected]>
---
mm/slqb.c | 3 ---
1 files changed, 0 insertions(+), 3 deletions(-)

diff --git a/mm/slqb.c b/mm/slqb.c
--- a/mm/slqb.c
+++ b/mm/slqb.c
@@ -3077,9 +3077,6 @@ struct kmem_cache *kmem_cache_create(const char *name, size_t size,

err:
up_write(&slqb_lock);
- if (flags & SLAB_PANIC)
- panic("%s: failed to create slab `%s'\n", __func__, name);
-
return NULL;
}
EXPORT_SYMBOL(kmem_cache_create);


2009-10-04 11:52:05

by Pekka Enberg

[permalink] [raw]
Subject: Re: [patch] slqb: remove unnecessary conditional in kmem_cache_create

David Rientjes wrote:
> kmem_cache_open() panics when a SLAB_PANIC cache cannot be opened because
> it has early callers using the flag that do not go through
> kmem_cache_create().
>
> If kmem_cache_open() fails for a SLAB_PANIC cache, it would have panicked
> the machine. Thus, checking for this flag in kmem_cache_create() is
> unnecessary in the error patch since it is always clear.

Yes, but there are other error cases in kmem_cache_create() that "goto
err" for which we do need to check for SLAB_PANIC.

>
> Cc: Nick Piggin <[email protected]>
> Signed-off-by: David Rientjes <[email protected]>
> ---
> mm/slqb.c | 3 ---
> 1 files changed, 0 insertions(+), 3 deletions(-)
>
> diff --git a/mm/slqb.c b/mm/slqb.c
> --- a/mm/slqb.c
> +++ b/mm/slqb.c
> @@ -3077,9 +3077,6 @@ struct kmem_cache *kmem_cache_create(const char *name, size_t size,
>
> err:
> up_write(&slqb_lock);
> - if (flags & SLAB_PANIC)
> - panic("%s: failed to create slab `%s'\n", __func__, name);
> -
> return NULL;
> }
> EXPORT_SYMBOL(kmem_cache_create);