mm: add a basic debugging framework for memory initialisation
[sfrench/cifs-2.6.git] / mm / mempool.c
index cc1ca86dfc2496b6e0cae7703d4a6dc4f4f97150..a46eb1b4bb661e12a6f752964ad2df190bc763aa 100644 (file)
@@ -62,10 +62,9 @@ mempool_t *mempool_create_node(int min_nr, mempool_alloc_t *alloc_fn,
                        mempool_free_t *free_fn, void *pool_data, int node_id)
 {
        mempool_t *pool;
-       pool = kmalloc_node(sizeof(*pool), GFP_KERNEL, node_id);
+       pool = kmalloc_node(sizeof(*pool), GFP_KERNEL | __GFP_ZERO, node_id);
        if (!pool)
                return NULL;
-       memset(pool, 0, sizeof(*pool));
        pool->elements = kmalloc_node(min_nr * sizeof(void *),
                                        GFP_KERNEL, node_id);
        if (!pool->elements) {
@@ -263,6 +262,9 @@ void mempool_free(void *element, mempool_t *pool)
 {
        unsigned long flags;
 
+       if (unlikely(element == NULL))
+               return;
+
        smp_mb();
        if (pool->curr_nr < pool->min_nr) {
                spin_lock_irqsave(&pool->lock, flags);
@@ -297,7 +299,7 @@ EXPORT_SYMBOL(mempool_free_slab);
 
 /*
  * A commonly used alloc and free fn that kmalloc/kfrees the amount of memory
- * specfied by pool_data
+ * specified by pool_data
  */
 void *mempool_kmalloc(gfp_t gfp_mask, void *pool_data)
 {