Skip to content

Commit

Permalink
block: Move the second call to get_request to the end of the loop
Browse files Browse the repository at this point in the history
In function get_request_wait, the second call to get_request could be
moved to the end of the while loop, because if the first call to
get_request fails, the second call will fail without sleep.

Signed-off-by: Zhang Yanmin <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
  • Loading branch information
Zhang, Yanmin authored and Jens Axboe committed May 28, 2008
1 parent ca39d65 commit 05caf8d
Showing 1 changed file with 17 additions and 20 deletions.
37 changes: 17 additions & 20 deletions block/blk-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -806,35 +806,32 @@ static struct request *get_request_wait(struct request_queue *q, int rw_flags,
rq = get_request(q, rw_flags, bio, GFP_NOIO);
while (!rq) {
DEFINE_WAIT(wait);
struct io_context *ioc;
struct request_list *rl = &q->rq;

prepare_to_wait_exclusive(&rl->wait[rw], &wait,
TASK_UNINTERRUPTIBLE);

rq = get_request(q, rw_flags, bio, GFP_NOIO);

if (!rq) {
struct io_context *ioc;
blk_add_trace_generic(q, bio, rw, BLK_TA_SLEEPRQ);

blk_add_trace_generic(q, bio, rw, BLK_TA_SLEEPRQ);

__generic_unplug_device(q);
spin_unlock_irq(q->queue_lock);
io_schedule();
__generic_unplug_device(q);
spin_unlock_irq(q->queue_lock);
io_schedule();

/*
* After sleeping, we become a "batching" process and
* will be able to allocate at least one request, and
* up to a big batch of them for a small period time.
* See ioc_batching, ioc_set_batching
*/
ioc = current_io_context(GFP_NOIO, q->node);
ioc_set_batching(q, ioc);
/*
* After sleeping, we become a "batching" process and
* will be able to allocate at least one request, and
* up to a big batch of them for a small period time.
* See ioc_batching, ioc_set_batching
*/
ioc = current_io_context(GFP_NOIO, q->node);
ioc_set_batching(q, ioc);

spin_lock_irq(q->queue_lock);
}
spin_lock_irq(q->queue_lock);
finish_wait(&rl->wait[rw], &wait);
}

rq = get_request(q, rw_flags, bio, GFP_NOIO);
};

return rq;
}
Expand Down

0 comments on commit 05caf8d

Please sign in to comment.