]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
blk-mq: Clean up all_q_list on request_queue deletion
authorchris hyser <chris.hyser@oracle.com>
Fri, 3 Mar 2017 21:24:22 +0000 (13:24 -0800)
committerAllen Pais <allen.pais@oracle.com>
Mon, 15 May 2017 10:51:50 +0000 (16:21 +0530)
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 <chris.hyser@oracle.com>
Reviewed-by: Shannon Nelson <shannon.nelson@oracle.com>
Orabug: 25569331
Signed-off-by: Allen Pais <allen.pais@oracle.com>
block/blk-mq.c

index 070ed0f2415115c3bf2ab21aa88c28b1d0f5f6d3..cc4956a368a75b8c56b745e5bcf07e7013a89a89 100644 (file)
@@ -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);