A BIO based request queue does not have a tag_set, which prevent testing for the flag BLK_MQ_F_NO_SCHED indicating that the queue does not require an elevator. This leads to an incorrect initialization of a default elevator in some cases such as BIO based nullblk (queue_mode == BIO) with zoned mode enabled as the default elevator in this case is mq-deadline instead of "none". Fix this by including the absence of a tag_set for a queue as an indicator that the queue should not have an elevator. Reported-by: Shinichiro Kawasaki <shinichiro.kawasaki@xxxxxxx> Signed-off-by: Damien Le Moal <damien.lemoal@xxxxxxx> --- block/elevator.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/block/elevator.c b/block/elevator.c index 5437059c9261..995d1e67056c 100644 --- a/block/elevator.c +++ b/block/elevator.c @@ -616,7 +616,7 @@ int elevator_switch_mq(struct request_queue *q, static inline bool elv_support_iosched(struct request_queue *q) { - if (q->tag_set && (q->tag_set->flags & BLK_MQ_F_NO_SCHED)) + if (!q->tag_set || (q->tag_set->flags & BLK_MQ_F_NO_SCHED)) return false; return true; } -- 2.21.0