diff options
author | Akinobu Mita <akinobu.mita@gmail.com> | 2008-04-29 04:03:13 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-04-29 11:06:25 -0400 |
commit | 199f0ca514f9c17668eec4f935c4ba24cd789f85 (patch) | |
tree | 54406e3eb5be58e3350d8f60a64ac78ec3990f97 /lib/idr.c | |
parent | 801678c5a3b4c79236970bcca27c733f5559e0d1 (diff) |
idr: create idr_layer_cache at boot time
Avoid a possible kmem_cache_create() failure by creating idr_layer_cache
unconditionary at boot time rather than creating it on-demand when idr_init()
is called the first time.
This change also enables us to eliminate the check every time idr_init() is
called.
[akpm@linux-foundation.org: rename init_id_cache() to idr_init_cache()]
[akpm@linux-foundation.org: fix alpha build]
Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'lib/idr.c')
-rw-r--r-- | lib/idr.c | 10 |
1 files changed, 4 insertions, 6 deletions
@@ -585,12 +585,11 @@ static void idr_cache_ctor(struct kmem_cache *idr_layer_cache, void *idr_layer) | |||
585 | memset(idr_layer, 0, sizeof(struct idr_layer)); | 585 | memset(idr_layer, 0, sizeof(struct idr_layer)); |
586 | } | 586 | } |
587 | 587 | ||
588 | static int init_id_cache(void) | 588 | void __init idr_init_cache(void) |
589 | { | 589 | { |
590 | if (!idr_layer_cache) | 590 | idr_layer_cache = kmem_cache_create("idr_layer_cache", |
591 | idr_layer_cache = kmem_cache_create("idr_layer_cache", | 591 | sizeof(struct idr_layer), 0, SLAB_PANIC, |
592 | sizeof(struct idr_layer), 0, 0, idr_cache_ctor); | 592 | idr_cache_ctor); |
593 | return 0; | ||
594 | } | 593 | } |
595 | 594 | ||
596 | /** | 595 | /** |
@@ -602,7 +601,6 @@ static int init_id_cache(void) | |||
602 | */ | 601 | */ |
603 | void idr_init(struct idr *idp) | 602 | void idr_init(struct idr *idp) |
604 | { | 603 | { |
605 | init_id_cache(); | ||
606 | memset(idp, 0, sizeof(struct idr)); | 604 | memset(idp, 0, sizeof(struct idr)); |
607 | spin_lock_init(&idp->lock); | 605 | spin_lock_init(&idp->lock); |
608 | } | 606 | } |