From: Jens Axboe Just drops the unplug_delay debug hunk (going from 3ms -> 1sec), and kills the unconditional ->unplug_fn call (this halved cpu usage in the dm test). --- 25-akpm/drivers/block/ll_rw_blk.c | 11 ++--------- 1 files changed, 2 insertions(+), 9 deletions(-) diff -puN drivers/block/ll_rw_blk.c~per-backing_dev-unplugging-unplug_delay drivers/block/ll_rw_blk.c --- 25/drivers/block/ll_rw_blk.c~per-backing_dev-unplugging-unplug_delay 2004-04-03 15:21:01.459062384 -0800 +++ 25-akpm/drivers/block/ll_rw_blk.c 2004-04-03 15:21:01.466061320 -0800 @@ -231,13 +231,9 @@ void blk_queue_make_request(request_queu blk_queue_dma_alignment(q, 511); q->unplug_thresh = 4; /* hmm */ -#if 0 q->unplug_delay = (3 * HZ) / 1000; /* 3 milliseconds */ if (q->unplug_delay == 0) q->unplug_delay = 1; -#else - q->unplug_delay = HZ; -#endif INIT_WORK(&q->unplug_work, blk_unplug_work, q); @@ -1134,11 +1130,8 @@ static inline void __generic_unplug_devi if (test_bit(QUEUE_FLAG_STOPPED, &q->queue_flags)) return; - /* - * always call down, since we can race now with setting the plugged - * bit outside of the queue lock - */ - blk_remove_plug(q); + if (!blk_remove_plug(q)) + return; /* * was plugged, fire request_fn if queue has stuff to do _