[PATCH] blk_execute_rq_nowait-speedup
authorAndrew Morton <akpm@osdl.org>
Wed, 22 Mar 2006 07:08:01 +0000 (08:08 +0100)
committerJens Axboe <axboe@nelson.home.kernel.dk>
Mon, 27 Mar 2006 07:29:02 +0000 (09:29 +0200)
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>
block/ll_rw_blk.c

index b836b43..7fc903b 100644 (file)
@@ -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);
 
 /**