X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fidr.c;h=8368c81fcb7d21cd3d85c8c0880f918b9c1911f5;hb=a42dde04152750426cc620fd277e80fffae2f65a;hp=5ca67b3cfd35ba3243badf0fc50371c299c961fd;hpb=add096909da63ef32d6766f6771c07c9f16c6ee5;p=linux-2.6 diff --git a/lib/idr.c b/lib/idr.c index 5ca67b3cfd..8368c81fcb 100644 --- a/lib/idr.c +++ b/lib/idr.c @@ -120,7 +120,7 @@ static int sub_alloc(struct idr *idp, int *starting_id, struct idr_layer **pa) int n, m, sh; struct idr_layer *p, *new; int l, id, oid; - long bm; + unsigned long bm; id = *starting_id; restart: @@ -405,7 +405,7 @@ EXPORT_SYMBOL(idr_remove); */ void idr_remove_all(struct idr *idp) { - int n, id, max, error = 0; + int n, id, max; struct idr_layer *p; struct idr_layer *pa[MAX_LEVEL]; struct idr_layer **paa = &pa[0]; @@ -415,7 +415,7 @@ void idr_remove_all(struct idr *idp) max = 1 << n; id = 0; - while (id < max && !error) { + while (id < max) { while (n > IDR_BITS && p) { n -= IDR_BITS; *paa++ = p; @@ -580,18 +580,16 @@ void *idr_replace(struct idr *idp, void *ptr, int id) } EXPORT_SYMBOL(idr_replace); -static void idr_cache_ctor(void * idr_layer, struct kmem_cache *idr_layer_cache, - unsigned long flags) +static void idr_cache_ctor(struct kmem_cache *idr_layer_cache, void *idr_layer) { memset(idr_layer, 0, sizeof(struct idr_layer)); } -static int init_id_cache(void) +void __init idr_init_cache(void) { - if (!idr_layer_cache) - idr_layer_cache = kmem_cache_create("idr_layer_cache", - sizeof(struct idr_layer), 0, 0, idr_cache_ctor, NULL); - return 0; + idr_layer_cache = kmem_cache_create("idr_layer_cache", + sizeof(struct idr_layer), 0, SLAB_PANIC, + idr_cache_ctor); } /** @@ -603,7 +601,6 @@ static int init_id_cache(void) */ void idr_init(struct idr *idp) { - init_id_cache(); memset(idp, 0, sizeof(struct idr)); spin_lock_init(&idp->lock); }