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

[PATCH 14/30] gdrom: use blk_mq_alloc_disk



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

Signed-off-by: Christoph Hellwig <hch@xxxxxx>
---
 drivers/cdrom/gdrom.c | 45 ++++++++++++++++++++-----------------------
 1 file changed, 21 insertions(+), 24 deletions(-)

diff --git a/drivers/cdrom/gdrom.c b/drivers/cdrom/gdrom.c
index c6d8c0f59722..8e1fe75af93f 100644
--- a/drivers/cdrom/gdrom.c
+++ b/drivers/cdrom/gdrom.c
@@ -772,53 +772,50 @@ static int probe_gdrom(struct platform_device *devptr)
                goto probe_fail_no_mem;
        }
        probe_gdrom_setupcd();
-       gd.disk = alloc_disk(1);
-       if (!gd.disk) {
-               err = -ENODEV;
-               goto probe_fail_no_disk;
+
+       err = blk_mq_alloc_sq_tag_set(&gd.tag_set, &gdrom_mq_ops, 1,
+                               BLK_MQ_F_SHOULD_MERGE | BLK_MQ_F_BLOCKING);
+       if (err)
+               goto probe_fail_free_cd_info;
+
+       gd.disk = blk_mq_alloc_disk(&gd.tag_set, NULL);
+       if (IS_ERR(gd.disk)) {
+               err = PTR_ERR(gd.disk);
+               goto probe_fail_free_tag_set;
        }
+       gd.gdrom_rq = gd.disk->queue;
        probe_gdrom_setupdisk();
        if (register_cdrom(gd.disk, gd.cd_info)) {
                err = -ENODEV;
-               goto probe_fail_cdrom_register;
+               goto probe_fail_cleanup_disk;
        }
        gd.disk->fops = &gdrom_bdops;
        gd.disk->events = DISK_EVENT_MEDIA_CHANGE;
        /* latch on to the interrupt */
        err = gdrom_set_interrupt_handlers();
        if (err)
-               goto probe_fail_cmdirq_register;
-
-       gd.gdrom_rq = blk_mq_init_sq_queue(&gd.tag_set, &gdrom_mq_ops, 1,
-                               BLK_MQ_F_SHOULD_MERGE | BLK_MQ_F_BLOCKING);
-       if (IS_ERR(gd.gdrom_rq)) {
-               err = PTR_ERR(gd.gdrom_rq);
-               gd.gdrom_rq = NULL;
-               goto probe_fail_requestq;
-       }
+               goto probe_fail_cleanup_disk;
 
        err = probe_gdrom_setupqueue();
        if (err)
-               goto probe_fail_toc;
+               goto probe_fail_free_irqs;
 
        gd.toc = kzalloc(sizeof(struct gdromtoc), GFP_KERNEL);
        if (!gd.toc) {
                err = -ENOMEM;
-               goto probe_fail_toc;
+               goto probe_fail_free_irqs;
        }
        add_disk(gd.disk);
        return 0;
 
-probe_fail_toc:
-       blk_cleanup_queue(gd.gdrom_rq);
-       blk_mq_free_tag_set(&gd.tag_set);
-probe_fail_requestq:
+probe_fail_free_irqs:
        free_irq(HW_EVENT_GDROM_DMA, &gd);
        free_irq(HW_EVENT_GDROM_CMD, &gd);
-probe_fail_cmdirq_register:
-probe_fail_cdrom_register:
-       del_gendisk(gd.disk);
-probe_fail_no_disk:
+probe_fail_cleanup_disk:
+       blk_cleanup_disk(gd.disk);
+probe_fail_free_tag_set:
+       blk_mq_free_tag_set(&gd.tag_set);
+probe_fail_free_cd_info:
        kfree(gd.cd_info);
 probe_fail_no_mem:
        unregister_blkdev(gdrom_major, GDROM_DEV_NAME);
-- 
2.30.2




 


Rackspace

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