loop: fix order of cleaning up the queue and freeing the tagset
authorChristoph Hellwig <hch@lst.de>
Wed, 16 Jun 2021 07:15:47 +0000 (09:15 +0200)
committerJens Axboe <axboe@kernel.dk>
Wed, 16 Jun 2021 12:53:51 +0000 (06:53 -0600)
We must release the queue before freeing the tagset.

Fixes: 1c99502fae35 ("loop: use blk_mq_alloc_disk and blk_cleanup_disk")
Reported-by: Bruno Goncalves <bgoncalv@redhat.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/block/loop.c

index 3f40e67..e90f7d3 100644 (file)
@@ -2183,8 +2183,8 @@ out:
 static void loop_remove(struct loop_device *lo)
 {
        del_gendisk(lo->lo_disk);
-       blk_mq_free_tag_set(&lo->tag_set);
        blk_cleanup_disk(lo->lo_disk);
+       blk_mq_free_tag_set(&lo->tag_set);
        mutex_destroy(&lo->lo_mutex);
        kfree(lo);
 }