From: Lou Langholtz This patch changes the behavior of blk_start_queue() so that request queues really do start up again after blk_start_queue() is called (on queues that were previously stopped via blk_stop_queue). I have tested this patch with the use of blk_stop_queue and blk_start_queue in my branch of the nbd block device driver (not yet released). blk_start_queue is also used in ./drivers/{block/cciss.c,ide/ide-io.c} which should see things function as intended now w.r.t. stopping and starting the request queue (but I do not know if anybody noticed that they weren't working correctly before). ide-io.c uses queue stop and start for power management handling. drivers/block/ll_rw_blk.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff -puN drivers/block/ll_rw_blk.c~blk_start_queue-fix drivers/block/ll_rw_blk.c --- 25/drivers/block/ll_rw_blk.c~blk_start_queue-fix 2003-07-28 00:23:41.000000000 -0700 +++ 25-akpm/drivers/block/ll_rw_blk.c 2003-07-28 00:23:41.000000000 -0700 @@ -1041,10 +1041,10 @@ int blk_remove_plug(request_queue_t *q) */ static inline void __generic_unplug_device(request_queue_t *q) { - if (!blk_remove_plug(q)) + if (test_bit(QUEUE_FLAG_STOPPED, &q->queue_flags)) return; - if (test_bit(QUEUE_FLAG_STOPPED, &q->queue_flags)) + if (!blk_remove_plug(q)) return; del_timer(&q->unplug_timer); _