block: fix issue with calling blk_stop_queue() from the request_fn handler
authorJens Axboe <jaxboe@fusionio.com>
Fri, 25 Mar 2011 15:58:59 +0000 (16:58 +0100)
committerJens Axboe <jaxboe@fusionio.com>
Fri, 25 Mar 2011 16:04:08 +0000 (17:04 +0100)
When the queue work handler was converted to delayed work, the
stopping was inadvertently made sync as well. Change this back
to being async stop, using __cancel_delayed_work() instead of
cancel_delayed_work().

Reported-by: Jeremy Fitzhardinge <jeremy@goop.org>
Reported-by: Chris Mason <chris.mason@oracle.com>
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
block/blk-core.c

index 64e96ee1d6af2250765f8a4de30d0cb2416da74c..e0a062363937291e2a9b82602b296bd8e6e2602a 100644 (file)
@@ -271,7 +271,7 @@ EXPORT_SYMBOL(blk_start_queue);
  **/
 void blk_stop_queue(struct request_queue *q)
 {
-       cancel_delayed_work(&q->delay_work);
+       __cancel_delayed_work(&q->delay_work);
        queue_flag_set(QUEUE_FLAG_STOPPED, q);
 }
 EXPORT_SYMBOL(blk_stop_queue);