OSDN Git Service

mtip32xx: use blk_mq_alloc_disk and blk_cleanup_disk
authorChristoph Hellwig <hch@lst.de>
Mon, 14 Jun 2021 06:03:43 +0000 (08:03 +0200)
committerJens Axboe <axboe@kernel.dk>
Wed, 30 Jun 2021 21:34:04 +0000 (15:34 -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>
Link: https://lore.kernel.org/r/20210614060343.3965416-3-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/block/mtip32xx/mtip32xx.c

index d5ff593..9018557 100644 (file)
@@ -3548,35 +3548,6 @@ static int mtip_block_initialize(struct driver_data *dd)
                goto protocol_init_error;
        }
 
-       dd->disk = alloc_disk_node(MTIP_MAX_MINORS, dd->numa_node);
-       if (dd->disk  == NULL) {
-               dev_err(&dd->pdev->dev,
-                       "Unable to allocate gendisk structure\n");
-               rv = -EINVAL;
-               goto alloc_disk_error;
-       }
-
-       rv = ida_alloc(&rssd_index_ida, GFP_KERNEL);
-       if (rv < 0)
-               goto ida_get_error;
-       index = rv;
-
-       rv = rssd_disk_name_format("rssd",
-                               index,
-                               dd->disk->disk_name,
-                               DISK_NAME_LEN);
-       if (rv)
-               goto disk_index_error;
-
-       dd->disk->major         = dd->major;
-       dd->disk->first_minor   = index * MTIP_MAX_MINORS;
-       dd->disk->minors        = MTIP_MAX_MINORS;
-       dd->disk->fops          = &mtip_block_ops;
-       dd->disk->private_data  = dd;
-       dd->index               = index;
-
-       mtip_hw_debugfs_init(dd);
-
        memset(&dd->tags, 0, sizeof(dd->tags));
        dd->tags.ops = &mtip_mq_ops;
        dd->tags.nr_hw_queues = 1;
@@ -3595,17 +3566,35 @@ static int mtip_block_initialize(struct driver_data *dd)
                goto block_queue_alloc_tag_error;
        }
 
-       /* Allocate the request queue. */
-       dd->queue = blk_mq_init_queue(&dd->tags);
-       if (IS_ERR(dd->queue)) {
+       dd->disk = blk_mq_alloc_disk(&dd->tags, dd);
+       if (IS_ERR(dd->disk)) {
                dev_err(&dd->pdev->dev,
                        "Unable to allocate request queue\n");
                rv = -ENOMEM;
                goto block_queue_alloc_init_error;
        }
+       dd->queue               = dd->disk->queue;
 
-       dd->disk->queue         = dd->queue;
-       dd->queue->queuedata    = dd;
+       rv = ida_alloc(&rssd_index_ida, GFP_KERNEL);
+       if (rv < 0)
+               goto ida_get_error;
+       index = rv;
+
+       rv = rssd_disk_name_format("rssd",
+                               index,
+                               dd->disk->disk_name,
+                               DISK_NAME_LEN);
+       if (rv)
+               goto disk_index_error;
+
+       dd->disk->major         = dd->major;
+       dd->disk->first_minor   = index * MTIP_MAX_MINORS;
+       dd->disk->minors        = MTIP_MAX_MINORS;
+       dd->disk->fops          = &mtip_block_ops;
+       dd->disk->private_data  = dd;
+       dd->index               = index;
+
+       mtip_hw_debugfs_init(dd);
 
 skip_create_disk:
        /* Initialize the protocol layer. */
@@ -3671,23 +3660,17 @@ start_service_thread:
 kthread_run_error:
        /* Delete our gendisk. This also removes the device from /dev */
        del_gendisk(dd->disk);
-
 read_capacity_error:
 init_hw_cmds_error:
-       blk_cleanup_queue(dd->queue);
-block_queue_alloc_init_error:
-       blk_mq_free_tag_set(&dd->tags);
-block_queue_alloc_tag_error:
        mtip_hw_debugfs_exit(dd);
 disk_index_error:
        ida_free(&rssd_index_ida, index);
-
 ida_get_error:
-       put_disk(dd->disk);
-
-alloc_disk_error:
+       blk_cleanup_disk(dd->disk);
+block_queue_alloc_init_error:
+       blk_mq_free_tag_set(&dd->tags);
+block_queue_alloc_tag_error:
        mtip_hw_exit(dd); /* De-initialize the protocol layer. */
-
 protocol_init_error:
        return rv;
 }