]> www.infradead.org Git - users/willy/xarray.git/commitdiff
loop: use blk_mq_alloc_disk and blk_cleanup_disk
authorChristoph Hellwig <hch@lst.de>
Wed, 2 Jun 2021 06:53:33 +0000 (09:53 +0300)
committerJens Axboe <axboe@kernel.dk>
Fri, 11 Jun 2021 17:53:03 +0000 (11:53 -0600)
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>
Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Link: https://lore.kernel.org/r/20210602065345.355274-19-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
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);
 }