Message ID | 20191007221246.12824-1-damien.lemoal@wdc.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | block: Fix elv_support_iosched() | expand |
On 10/7/19 4:12 PM, Damien Le Moal wrote: > 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. Why not just check for mq_ops?
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; }
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@wdc.com> Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com> --- block/elevator.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)