diff options
author | Andrew Morton <akpm@osdl.org> | 2006-03-22 08:08:01 +0100 |
---|---|---|
committer | Jens Axboe <axboe@nelson.home.kernel.dk> | 2006-03-27 09:29:02 +0200 |
commit | 4c5d0bbde9669cfb7f7fd4670dc9a117aea90384 (patch) | |
tree | 1c118a45803e81ab6bd1a049273b3971b46bb3cd | |
parent | b8fca1c7682105c843319728d8e37b42b19092bb (diff) | |
download | op-kernel-dev-4c5d0bbde9669cfb7f7fd4670dc9a117aea90384.zip op-kernel-dev-4c5d0bbde9669cfb7f7fd4670dc9a117aea90384.tar.gz |
[PATCH] blk_execute_rq_nowait-speedup
Both elv_add_request() and generic_unplug_device() grab the queue lock
and disable interrupts, do that locally and use the __ variants.
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Jens Axboe <axboe@suse.de>
-rw-r--r-- | block/ll_rw_blk.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/block/ll_rw_blk.c b/block/ll_rw_blk.c index b836b43..7fc903b 100644 --- a/block/ll_rw_blk.c +++ b/block/ll_rw_blk.c @@ -2477,10 +2477,12 @@ void blk_execute_rq_nowait(request_queue_t *q, struct gendisk *bd_disk, rq->rq_disk = bd_disk; rq->flags |= REQ_NOMERGE; rq->end_io = done; - elv_add_request(q, rq, where, 1); - generic_unplug_device(q); + WARN_ON(irqs_disabled()); + spin_lock_irq(q->queue_lock); + __elv_add_request(q, rq, where, 1); + __generic_unplug_device(q); + spin_unlock_irq(q->queue_lock); } - EXPORT_SYMBOL_GPL(blk_execute_rq_nowait); /** |