Merge tag 'selinux-pr-20210629' of git://git.kernel.org/pub/scm/linux/kernel/git...
[sfrench/cifs-2.6.git] / drivers / cdrom / gdrom.c
index c6d8c0f597224bb95276b85c8fb948f63f0790e1..8e1fe75af93f850277efb298982ba6146a20becb 100644 (file)
@@ -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);