[PATCH] mempool - only init waitqueue in slow path
authorBenjamin LaHaise <bcrl@kvack.org>
Thu, 23 Jun 2005 07:10:01 +0000 (00:10 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Thu, 23 Jun 2005 16:45:29 +0000 (09:45 -0700)
Here's a small patch to improve the performance of mempool_alloc by only
initializing the wait queue when we're about to wait.

Signed-off-by: Benjamin LaHaise <benjamin.c.lahaise@intel.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
mm/mempool.c

index 920c8c3ab1b8f4a54ce752a46c5f6a5a11bd2d72..9a72f7d918fa251bd7b21720ba964af5c1cdc341 100644 (file)
@@ -204,7 +204,7 @@ void * mempool_alloc(mempool_t *pool, unsigned int __nocast gfp_mask)
 {
        void *element;
        unsigned long flags;
-       DEFINE_WAIT(wait);
+       wait_queue_t wait;
        int gfp_temp;
 
        might_sleep_if(gfp_mask & __GFP_WAIT);
@@ -235,6 +235,7 @@ repeat_alloc:
 
        /* Now start performing page reclaim */
        gfp_temp = gfp_mask;
+       init_wait(&wait);
        prepare_to_wait(&pool->wait, &wait, TASK_UNINTERRUPTIBLE);
        smp_mb();
        if (!pool->curr_nr)