mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-16 13:34:30 +00:00
blk-mq: don't insert passthrough request into sw queue
In case of real io scheduler, q->elevator is set, so blk_mq_run_hw_queue() may just check if scheduler queue has request to dispatch, see __blk_mq_sched_dispatch_requests(). Then IO hang may be caused because all passthorugh requests may stay in sw queue. And any passthrough request should have been inserted to hctx->dispatch always. Reported-by: Guangwu Zhang <guazhang@redhat.com> Fixes: d97217e7f024 ("blk-mq: don't queue plugged passthrough requests into scheduler") Signed-off-by: Ming Lei <ming.lei@redhat.com> Link: https://lore.kernel.org/r/20230621132208.1142318-1-ming.lei@redhat.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
72ef02b8df
commit
2293cae703
@ -2728,7 +2728,12 @@ static void blk_mq_dispatch_plug_list(struct blk_plug *plug, bool from_sched)
|
||||
|
||||
percpu_ref_get(&this_hctx->queue->q_usage_counter);
|
||||
/* passthrough requests should never be issued to the I/O scheduler */
|
||||
if (this_hctx->queue->elevator && !is_passthrough) {
|
||||
if (is_passthrough) {
|
||||
spin_lock(&this_hctx->lock);
|
||||
list_splice_tail_init(&list, &this_hctx->dispatch);
|
||||
spin_unlock(&this_hctx->lock);
|
||||
blk_mq_run_hw_queue(this_hctx, from_sched);
|
||||
} else if (this_hctx->queue->elevator) {
|
||||
this_hctx->queue->elevator->type->ops.insert_requests(this_hctx,
|
||||
&list, 0);
|
||||
blk_mq_run_hw_queue(this_hctx, from_sched);
|
||||
|
Loading…
x
Reference in New Issue
Block a user