]> www.infradead.org Git - users/hch/block.git/commitdiff
loop: use blk_mq_alloc_disk and blk_cleanup_disk
authorChristoph Hellwig <hch@lst.de>
Tue, 4 May 2021 15:39:11 +0000 (17:39 +0200)
committerChristoph Hellwig <hch@lst.de>
Wed, 2 Jun 2021 05:49:25 +0000 (08:49 +0300)
Use blk_mq_alloc_disk and blk_cleanup_disk to simplify the gendisk and
request_queue allocation.

Signed-off-by: Christoph Hellwig <hch@lst.de>
drivers/block/loop.c

index 95c570f5923fdaefcb55835d3f5b8f2dbc7c7c9c..3f40e673a101ace10e1e6a5e9e3996ecdb623380 100644 (file)
@@ -2117,12 +2117,12 @@ static int loop_add(struct loop_device **l, int i)
        if (err)
                goto out_free_idr;
 
-       lo->lo_queue = blk_mq_init_queue(&lo->tag_set);
-       if (IS_ERR(lo->lo_queue)) {
-               err = PTR_ERR(lo->lo_queue);
+       disk = lo->lo_disk = blk_mq_alloc_disk(&lo->tag_set, lo);
+       if (IS_ERR(disk)) {
+               err = PTR_ERR(disk);
                goto out_cleanup_tags;
        }
-       lo->lo_queue->queuedata = lo;
+       lo->lo_queue = lo->lo_disk->queue;
 
        blk_queue_max_hw_sectors(lo->lo_queue, BLK_DEF_MAX_SECTORS);
 
@@ -2134,11 +2134,6 @@ static int loop_add(struct loop_device **l, int i)
         */
        blk_queue_flag_set(QUEUE_FLAG_NOMERGES, lo->lo_queue);
 
-       err = -ENOMEM;
-       disk = lo->lo_disk = alloc_disk(1 << part_shift);
-       if (!disk)
-               goto out_free_queue;
-
        /*
         * Disable partition scanning by default. The in-kernel partition
         * scanning can be requested individually per-device during its
@@ -2166,6 +2161,7 @@ static int loop_add(struct loop_device **l, int i)
        spin_lock_init(&lo->lo_lock);
        disk->major             = LOOP_MAJOR;
        disk->first_minor       = i << part_shift;
+       disk->minors            = 1 << part_shift;
        disk->fops              = &lo_fops;
        disk->private_data      = lo;
        disk->queue             = lo->lo_queue;
@@ -2174,8 +2170,6 @@ static int loop_add(struct loop_device **l, int i)
        *l = lo;
        return lo->lo_number;
 
-out_free_queue:
-       blk_cleanup_queue(lo->lo_queue);
 out_cleanup_tags:
        blk_mq_free_tag_set(&lo->tag_set);
 out_free_idr:
@@ -2189,9 +2183,8 @@ out:
 static void loop_remove(struct loop_device *lo)
 {
        del_gendisk(lo->lo_disk);
-       blk_cleanup_queue(lo->lo_queue);
        blk_mq_free_tag_set(&lo->tag_set);
-       put_disk(lo->lo_disk);
+       blk_cleanup_disk(lo->lo_disk);
        mutex_destroy(&lo->lo_mutex);
        kfree(lo);
 }