When a QoS function is removed via rq_qos_del(), and it happens to be the last QoS function on the request queue, q->rq_qos becomes NULL. In this case, the QUEUE_FLAG_QOS_ENABLED bit should also be cleared to reflect that no QoS hooks remain active. This patch ensures that the QUEUE_FLAG_QOS_ENABLED flag is cleared if the queue no longer has any associated rq_qos policies. Failing to do so could cause unnecessary dereferences of a now-null q->rq_qos pointer in the I/O path. Signed-off-by: Nilay Shroff <nilay@xxxxxxxxxxxxx> --- block/blk-rq-qos.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/block/blk-rq-qos.c b/block/blk-rq-qos.c index 460c04715321..654478dfbc20 100644 --- a/block/blk-rq-qos.c +++ b/block/blk-rq-qos.c @@ -375,6 +375,8 @@ void rq_qos_del(struct rq_qos *rqos) break; } } + if (!q->rq_qos) + blk_queue_flag_clear(QUEUE_FLAG_QOS_ENABLED, q); blk_mq_unfreeze_queue(q, memflags); mutex_lock(&q->debugfs_mutex); -- 2.50.1