Index: linux-2.6/drivers/block/ll_rw_blk.c =================================================================== --- linux-2.6.orig/drivers/block/ll_rw_blk.c 2005-04-12 21:03:01.000000000 +1000 +++ linux-2.6/drivers/block/ll_rw_blk.c 2005-04-12 21:03:45.000000000 +1000 @@ -1956,10 +1956,11 @@ out: */ static struct request *get_request_wait(request_queue_t *q, int rw) { - DEFINE_WAIT(wait); struct request *rq; - do { + rq = get_request(q, rw, GFP_NOIO); + while (!rq) { + DEFINE_WAIT(wait); struct request_list *rl = &q->rq; prepare_to_wait_exclusive(&rl->wait[rw], &wait, @@ -1987,7 +1988,7 @@ static struct request *get_request_wait( spin_lock_irq(q->queue_lock); } finish_wait(&rl->wait[rw], &wait); - } while (!rq); + } return rq; }