From: Lou Langholtz <ldl@aros.net>

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);

_