Use slab_error for printing the error message from kmem_cache_destroy mm/slab.c | 24 ++++++++++-------------- 1 files changed, 10 insertions(+), 14 deletions(-) diff -puN mm/slab.c~1-kmem-cache-destroy mm/slab.c --- 25/mm/slab.c~1-kmem-cache-destroy 2003-06-15 01:55:17.000000000 -0700 +++ 25-akpm/mm/slab.c 2003-06-15 01:55:17.000000000 -0700 @@ -475,8 +475,6 @@ static void cache_estimate (unsigned lon *left_over = wastage; } -#if DEBUG - #define slab_error(cachep, msg) __slab_error(__FUNCTION__, cachep, msg) static void __slab_error(const char *function, kmem_cache_t *cachep, char *msg) @@ -486,8 +484,6 @@ static void __slab_error(const char *fun dump_stack(); } -#endif - /* * Start the reap timer running on the target CPU. We run at around 1 to 2Hz. * Add the CPU number into the expiry time to minimize the possibility of the @@ -1307,6 +1303,8 @@ int kmem_cache_shrink(kmem_cache_t *cach */ int kmem_cache_destroy (kmem_cache_t * cachep) { + int i; + if (!cachep || in_interrupt()) BUG(); @@ -1319,21 +1317,19 @@ int kmem_cache_destroy (kmem_cache_t * c up(&cache_chain_sem); if (__cache_shrink(cachep)) { - printk(KERN_ERR "kmem_cache_destroy: Can't free all objects %p\n", - cachep); + slab_error(cachep, "Can't free all objects"); down(&cache_chain_sem); list_add(&cachep->next,&cache_chain); up(&cache_chain_sem); return 1; } - { - int i; - for (i = 0; i < NR_CPUS; i++) - kfree(cachep->array[i]); - /* NUMA: free the list3 structures */ - kfree(cachep->lists.shared); - cachep->lists.shared = NULL; - } + + for (i = 0; i < NR_CPUS; i++) + kfree(cachep->array[i]); + + /* NUMA: free the list3 structures */ + kfree(cachep->lists.shared); + cachep->lists.shared = NULL; kmem_cache_free(&cache_cache, cachep); return 0; _