--- mm/mempool.c-dist Tue Dec 31 10:03:51 2002 +++ mm/mempool.c Tue Dec 31 10:04:24 2002 @@ -142,14 +142,14 @@ element = pool->alloc(gfp_mask, pool->pool_data); if (!element) goto out; spin_lock_irqsave(&pool->lock, flags); if (pool->curr_nr < pool->min_nr) add_element(pool, element); - else - kfree(element); /* Raced */ + else /* Raced */ + pool->free(element, pool->pool_data); } out_unlock: spin_unlock_irqrestore(&pool->lock, flags); out: return 0; }