Skip to content

Commit

Permalink
blk-mq: only dispatch to non-defauly queue maps if they have queues
Browse files Browse the repository at this point in the history
We should check if a given queue map actually has queues enabled before
dispatching to it.  This allows drivers to not initialize optional but
not used map types, which subsequently will allow fixing problems with
queue map rebuilds for that case.

Reviewed-by: Ming Lei <[email protected]>
Signed-off-by: Christoph Hellwig <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
  • Loading branch information
Christoph Hellwig authored and axboe committed Dec 17, 2018
1 parent 346fc10 commit 5aceaeb
Showing 1 changed file with 8 additions and 5 deletions.
13 changes: 8 additions & 5 deletions block/blk-mq.h
Original file line number Diff line number Diff line change
Expand Up @@ -105,14 +105,17 @@ static inline struct blk_mq_hw_ctx *blk_mq_map_queue(struct request_queue *q,
{
enum hctx_type type = HCTX_TYPE_DEFAULT;

if (q->tag_set->nr_maps > HCTX_TYPE_POLL &&
((flags & REQ_HIPRI) && test_bit(QUEUE_FLAG_POLL, &q->queue_flags)))
if ((flags & REQ_HIPRI) &&
q->tag_set->nr_maps > HCTX_TYPE_POLL &&
q->tag_set->map[HCTX_TYPE_POLL].nr_queues &&
test_bit(QUEUE_FLAG_POLL, &q->queue_flags))
type = HCTX_TYPE_POLL;

else if (q->tag_set->nr_maps > HCTX_TYPE_READ &&
((flags & REQ_OP_MASK) == REQ_OP_READ))
else if (((flags & REQ_OP_MASK) == REQ_OP_READ) &&
q->tag_set->nr_maps > HCTX_TYPE_READ &&
q->tag_set->map[HCTX_TYPE_READ].nr_queues)
type = HCTX_TYPE_READ;

return blk_mq_map_queue_type(q, type, cpu);
}

Expand Down

0 comments on commit 5aceaeb

Please sign in to comment.