blk-mq: clear q->mq_ops if init fail
authorMing Lin <ming.l@samsung.com>
Thu, 26 May 2016 06:23:27 +0000 (23:23 -0700)
committerJens Axboe <axboe@fb.com>
Thu, 26 May 2016 14:51:43 +0000 (08:51 -0600)
commitc7de5726307620711a4753b2a13d9e5daecc1081
treecbc8b1c52c7afc1e6f77490956b514aab95f1a2e
parent4d1034eb7c2f5e32d48ddc4dfce0f1a723d28667
blk-mq: clear q->mq_ops if init fail

blk_mq_init_queue() calls blk_mq_init_allocated_queue(), but q->mq_ops
was not cleared when blk_mq_init_allocated_queue() fails.
Then blk_cleanup_queue() calls blk_mq_free_queue() which will crash because:
- q->all_q_node is not added to all_q_list yet
- q->tag_set is NULL
- hctx was not setup yet or already freed

Fixed it by clearing q->mq_ops on error path.

Signed-off-by: Ming Lin <ming.l@samsung.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@fb.com>
block/blk-mq.c