Re: [PATCH] block: add blk_run_queue_async

Mike Snitzer
2011-04-18T19:55:27Z

On Mon, Apr 18, 2011 at 5:26 AM, Christoph Hellwig <hch@infradead.org> wrote:
> Instead of overloading __blk_run_queue to force an offload to kblockd
> add a new blk_run_queue_async helper to do it explicitly.  I've kept
> the blk_queue_stopped check for now, but I suspect it's not needed
> as the check we do when the workqueue items runs should be enough.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
>
> Index: linux-2.6/block/blk-core.c
> ===================================================================
> --- linux-2.6.orig/block/blk-core.c     2011-04-18 10:48:11.010100413 +0200
> +++ linux-2.6/block/blk-core.c  2011-04-18 10:57:56.340262741 +0200
...
> @@ -317,6 +315,20 @@ void __blk_run_queue(struct request_queu
>  EXPORT_SYMBOL(__blk_run_queue);
>
>  /**
> + * blk_run_queue_async - run a single device queue in workqueue context
> + * @q: The queue to run
> + *
> + * Description:
> + *    Tells kblockd to perform the equivalent of @blk_run_queue on behalf
> + *    of us.
> + */
> +void blk_run_queue_async(struct request_queue *q)
> +{
> +       if (likely(!blk_queue_stopped(q)))
> +               queue_delayed_work(kblockd_workqueue, &q->delay_work, 0);

I know Jens already queued this up 'for-linus' but why not use
kblockd_schedule_work(q, &q->delay_work)?