blk-mq: Add a NULL check in blk_mq_free_map_and_requests()
authorDan Carpenter <dan.carpenter@oracle.com>
Thu, 29 Nov 2018 10:56:54 +0000 (13:56 +0300)
committerJens Axboe <axboe@kernel.dk>
Thu, 29 Nov 2018 15:16:08 +0000 (08:16 -0700)
I recently found some code which called blk_mq_free_map_and_requests()
with a NULL set->tags pointer.  I fixed the caller, but it seems like a
good idea to add a NULL check here as well.  Now we can call:

blk_mq_free_tag_set(set);
blk_mq_free_tag_set(set);

twice in a row and it's harmless.

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-mq.c

index a82830f399338414814a26278b029b5288e8d218..5f4b93f424b4936325714f088cbf9b208dc32186 100644 (file)
@@ -2341,7 +2341,7 @@ static bool __blk_mq_alloc_rq_map(struct blk_mq_tag_set *set, int hctx_idx)
 static void blk_mq_free_map_and_requests(struct blk_mq_tag_set *set,
                                         unsigned int hctx_idx)
 {
-       if (set->tags[hctx_idx]) {
+       if (set->tags && set->tags[hctx_idx]) {
                blk_mq_free_rqs(set, set->tags[hctx_idx], hctx_idx);
                blk_mq_free_rq_map(set->tags[hctx_idx]);
                set->tags[hctx_idx] = NULL;