From db909ebaeb93b58294b935887c0bbff911c2c080 Mon Sep 17 00:00:00 2001 From: chris hyser Date: Fri, 3 Mar 2017 13:24:22 -0800 Subject: [PATCH] blk-mq: Clean up all_q_list on request_queue deletion Entries were not being removed from all_q_list when corresponding request queue structs were freed with subsequent embedded list pointers being trashed when the queue memory was re-allocated. Additionally, due to use of cached allocation pool (kmem_cache_alloc_node), the same data structure would be reinserted into the same list twice which cannot work given the kernel linked list implementation. Signed-off-by: Chris Hyser Reviewed-by: Shannon Nelson Orabug: 25569331 Signed-off-by: Allen Pais --- block/blk-mq.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/block/blk-mq.c b/block/blk-mq.c index 070ed0f24151..cc4956a368a7 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c @@ -2020,6 +2020,10 @@ void blk_mq_free_queue(struct request_queue *q) { struct blk_mq_tag_set *set = q->tag_set; + mutex_lock(&all_q_mutex); + list_del_init(&q->all_q_node); + mutex_unlock(&all_q_mutex); + blk_mq_del_queue_tag_set(q); blk_mq_exit_hw_queues(q, set, set->nr_hw_queues); -- 2.50.1