aboutsummaryrefslogtreecommitdiffstats
path: root/block/blk-mq.h
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2018-12-17 06:16:26 -0500
committerJens Axboe <axboe@kernel.dk>2018-12-17 07:44:45 -0500
commit5aceaeb26394538858a9dbae5830d628469a44cf (patch)
treee99f8902a6bcaa8eebaae309059b239f966eaac6 /block/blk-mq.h
parent346fc1089e5d4734990b4b6c3cd0cdeae9ae482d (diff)
blk-mq: only dispatch to non-defauly queue maps if they have queues
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 <ming.lei@redhat.com> Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'block/blk-mq.h')
-rw-r--r--block/blk-mq.h13
1 files changed, 8 insertions, 5 deletions
diff --git a/block/blk-mq.h b/block/blk-mq.h
index b63a0de8a07a..d1ed096723fb 100644
--- a/block/blk-mq.h
+++ b/block/blk-mq.h
@@ -105,14 +105,17 @@ static inline struct blk_mq_hw_ctx *blk_mq_map_queue(struct request_queue *q,
105{ 105{
106 enum hctx_type type = HCTX_TYPE_DEFAULT; 106 enum hctx_type type = HCTX_TYPE_DEFAULT;
107 107
108 if (q->tag_set->nr_maps > HCTX_TYPE_POLL && 108 if ((flags & REQ_HIPRI) &&
109 ((flags & REQ_HIPRI) && test_bit(QUEUE_FLAG_POLL, &q->queue_flags))) 109 q->tag_set->nr_maps > HCTX_TYPE_POLL &&
110 q->tag_set->map[HCTX_TYPE_POLL].nr_queues &&
111 test_bit(QUEUE_FLAG_POLL, &q->queue_flags))
110 type = HCTX_TYPE_POLL; 112 type = HCTX_TYPE_POLL;
111 113
112 else if (q->tag_set->nr_maps > HCTX_TYPE_READ && 114 else if (((flags & REQ_OP_MASK) == REQ_OP_READ) &&
113 ((flags & REQ_OP_MASK) == REQ_OP_READ)) 115 q->tag_set->nr_maps > HCTX_TYPE_READ &&
116 q->tag_set->map[HCTX_TYPE_READ].nr_queues)
114 type = HCTX_TYPE_READ; 117 type = HCTX_TYPE_READ;
115 118
116 return blk_mq_map_queue_type(q, type, cpu); 119 return blk_mq_map_queue_type(q, type, cpu);
117} 120}
118 121