[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 18/30] loop: use blk_mq_alloc_disk and blk_cleanup_disk



Use blk_mq_alloc_disk and blk_cleanup_disk to simplify the gendisk and
request_queue allocation.

Signed-off-by: Christoph Hellwig <hch@xxxxxx>
---
 drivers/block/loop.c | 19 ++++++-------------
 1 file changed, 6 insertions(+), 13 deletions(-)

diff --git a/drivers/block/loop.c b/drivers/block/loop.c
index 95c570f5923f..3f40e673a101 100644
--- a/drivers/block/loop.c
+++ b/drivers/block/loop.c
@@ -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 @@ static int loop_add(struct loop_device **l, int i)
 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);
 }
-- 
2.30.2




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.