diff options
author | Jens Axboe <axboe@fb.com> | 2015-12-28 13:01:22 -0700 |
---|---|---|
committer | Jens Axboe <axboe@fb.com> | 2015-12-28 13:07:07 -0700 |
commit | 21491412f2ec6f13d4104de734dec0ba659d092e (patch) | |
tree | 592f39218219dcc03dec67438fcdf139b6836d51 | |
parent | d3805611130af9b911e908af9f67a3f64f4f0914 (diff) | |
download | linux-stable-21491412f2ec6f13d4104de734dec0ba659d092e.tar.gz linux-stable-21491412f2ec6f13d4104de734dec0ba659d092e.tar.bz2 linux-stable-21491412f2ec6f13d4104de734dec0ba659d092e.zip |
block: add blk_start_queue_async()
We currently only have an inline/sync helper to restart a stopped
queue. If drivers need an async version, they have to roll their
own. Add a generic helper instead.
Signed-off-by: Jens Axboe <axboe@fb.com>
-rw-r--r-- | block/blk-core.c | 16 | ||||
-rw-r--r-- | include/linux/blkdev.h | 1 |
2 files changed, 17 insertions, 0 deletions
diff --git a/block/blk-core.c b/block/blk-core.c index c487b94c59e3..33e2f62d5062 100644 --- a/block/blk-core.c +++ b/block/blk-core.c @@ -207,6 +207,22 @@ void blk_delay_queue(struct request_queue *q, unsigned long msecs) EXPORT_SYMBOL(blk_delay_queue); /** + * blk_start_queue_async - asynchronously restart a previously stopped queue + * @q: The &struct request_queue in question + * + * Description: + * blk_start_queue_async() will clear the stop flag on the queue, and + * ensure that the request_fn for the queue is run from an async + * context. + **/ +void blk_start_queue_async(struct request_queue *q) +{ + queue_flag_clear(QUEUE_FLAG_STOPPED, q); + blk_run_queue_async(q); +} +EXPORT_SYMBOL(blk_start_queue_async); + +/** * blk_start_queue - restart a previously stopped queue * @q: The &struct request_queue in question * diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 0169ba2e2e64..c70e3588a48c 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h @@ -797,6 +797,7 @@ extern int sg_scsi_ioctl(struct request_queue *, struct gendisk *, fmode_t, extern int blk_queue_enter(struct request_queue *q, gfp_t gfp); extern void blk_queue_exit(struct request_queue *q); extern void blk_start_queue(struct request_queue *q); +extern void blk_start_queue_async(struct request_queue *q); extern void blk_stop_queue(struct request_queue *q); extern void blk_sync_queue(struct request_queue *q); extern void __blk_stop_queue(struct request_queue *q); |