Re: [PATCH] blk-mq: fix blk_mq_start_stopped_hw_queues from irqcontext

From: Jens Axboe
Date: Sun Oct 06 2013 - 14:10:42 EST


On Sun, Oct 06 2013, Christoph Hellwig wrote:
> The only caller of blk_mq_start_stopped_hw_queues is in irq context,
> leading to lockdep splat when it actually gets called. Fix this by
> deferring the hw queue run to workqueue context.
>
> Signed-off-by: Christoph Hellwig <hch@xxxxxx>
>
> diff --git a/block/blk-mq.c b/block/blk-mq.c
> index 2b85029..923e9e1 100644
> --- a/block/blk-mq.c
> +++ b/block/blk-mq.c
> @@ -686,7 +686,8 @@ void blk_mq_start_stopped_hw_queues(struct request_queue *q)
> if (!test_bit(BLK_MQ_S_STOPPED, &hctx->state))
> continue;
>
> - blk_mq_start_hw_queue(hctx);
> + clear_bit(BLK_MQ_S_STOPPED, &hctx->state);
> + blk_mq_run_hw_queue(hctx, true);
> }
> }
> EXPORT_SYMBOL(blk_mq_start_stopped_hw_queues);

Thanks, applied. Might not be a bad idea to just mimic the run queue
API, and provide a blk_mq_start_hw_queue(hctx, is_async) instead.

--
Jens Axboe

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/