]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
scsi: core: Pass a struct scsi_driver to scsi_{,un}register_driver()
authorUwe Kleine-König <u.kleine-koenig@baylibre.com>
Fri, 19 Dec 2025 09:25:30 +0000 (10:25 +0100)
committerMartin K. Petersen <martin.petersen@oracle.com>
Mon, 12 Jan 2026 02:31:57 +0000 (21:31 -0500)
This aligns with what other subsystems do, reduces boilerplate a bit for
device drivers and is less error prone.

Reviewed-by: Peter Wang <peter.wang@mediatek.com>
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@baylibre.com>
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Link: https://patch.msgid.link/ac17fdea58e384cb514c639306d48ce0005820b0.1766133330.git.u.kleine-koenig@baylibre.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/ch.c
drivers/scsi/scsi_sysfs.c
drivers/scsi/sd.c
drivers/scsi/ses.c
drivers/scsi/sr.c
drivers/scsi/st.c
drivers/ufs/core/ufshcd.c
include/scsi/scsi_driver.h

index fa07a6f54003ee3651a4af982534d0f1135ceed7..f2b63e4b9b99ea0849c12c68c14802bd1ae36104 100644 (file)
@@ -1014,7 +1014,7 @@ static int __init init_ch_module(void)
                       SCSI_CHANGER_MAJOR);
                goto fail1;
        }
-       rc = scsi_register_driver(&ch_template.gendrv);
+       rc = scsi_register_driver(&ch_template);
        if (rc < 0)
                goto fail2;
        return 0;
@@ -1028,7 +1028,7 @@ static int __init init_ch_module(void)
 
 static void __exit exit_ch_module(void)
 {
-       scsi_unregister_driver(&ch_template.gendrv);
+       scsi_unregister_driver(&ch_template);
        unregister_chrdev(SCSI_CHANGER_MAJOR, "ch");
        class_unregister(&ch_sysfs_class);
        idr_destroy(&ch_index_idr);
index 99eb0a30df615ec41810679f1a5c3176bc028e93..db0ba68f2e6e5557d79efa57c8f0611dc8eb2635 100644 (file)
@@ -1554,8 +1554,10 @@ restart:
 }
 EXPORT_SYMBOL(scsi_remove_target);
 
-int __scsi_register_driver(struct device_driver *drv, struct module *owner)
+int __scsi_register_driver(struct scsi_driver *sdrv, struct module *owner)
 {
+       struct device_driver *drv = &sdrv->gendrv;
+
        drv->bus = &scsi_bus_type;
        drv->owner = owner;
 
index f50b92e632018769fe8c70fbff91e43378287957..6ea6ee2830a4606e7ef887c51c52fceef5bb4cfa 100644 (file)
@@ -4417,7 +4417,7 @@ static int __init init_sd(void)
                goto err_out_class;
        }
 
-       err = scsi_register_driver(&sd_template.gendrv);
+       err = scsi_register_driver(&sd_template);
        if (err)
                goto err_out_driver;
 
@@ -4444,7 +4444,7 @@ static void __exit exit_sd(void)
 
        SCSI_LOG_HLQUEUE(3, printk("exit_sd: exiting sd driver\n"));
 
-       scsi_unregister_driver(&sd_template.gendrv);
+       scsi_unregister_driver(&sd_template);
        mempool_destroy(sd_page_pool);
 
        class_unregister(&sd_disk_class);
index 2c61624cb4b038b07073f5538378c126bbd44c29..f8f5164f3de232f6ce3b4c9d7a1a997281d2f2d6 100644 (file)
@@ -921,7 +921,7 @@ static int __init ses_init(void)
        if (err)
                return err;
 
-       err = scsi_register_driver(&ses_template.gendrv);
+       err = scsi_register_driver(&ses_template);
        if (err)
                goto out_unreg;
 
@@ -934,7 +934,7 @@ static int __init ses_init(void)
 
 static void __exit ses_exit(void)
 {
-       scsi_unregister_driver(&ses_template.gendrv);
+       scsi_unregister_driver(&ses_template);
        scsi_unregister_interface(&ses_interface);
 }
 
index add13e30689838c0567c967ed9d73b1c63e585fc..2f6bb6355186691a9bb7b4380cce4fffad2bfbd1 100644 (file)
@@ -1001,7 +1001,7 @@ static int __init init_sr(void)
        rc = register_blkdev(SCSI_CDROM_MAJOR, "sr");
        if (rc)
                return rc;
-       rc = scsi_register_driver(&sr_template.gendrv);
+       rc = scsi_register_driver(&sr_template);
        if (rc)
                unregister_blkdev(SCSI_CDROM_MAJOR, "sr");
 
@@ -1010,7 +1010,7 @@ static int __init init_sr(void)
 
 static void __exit exit_sr(void)
 {
-       scsi_unregister_driver(&sr_template.gendrv);
+       scsi_unregister_driver(&sr_template);
        unregister_blkdev(SCSI_CDROM_MAJOR, "sr");
 }
 
index 168f25e4aaa387202100ed353246b61e8aa5cf4d..45622cfce9266870fb5ff10af450d2380e1c4e1c 100644 (file)
@@ -4576,7 +4576,7 @@ static int __init init_st(void)
                goto err_class;
        }
 
-       err = scsi_register_driver(&st_template.gendrv);
+       err = scsi_register_driver(&st_template);
        if (err)
                goto err_chrdev;
 
@@ -4592,7 +4592,7 @@ err_class:
 
 static void __exit exit_st(void)
 {
-       scsi_unregister_driver(&st_template.gendrv);
+       scsi_unregister_driver(&st_template);
        unregister_chrdev_region(MKDEV(SCSI_TAPE_MAJOR, 0),
                                 ST_MAX_TAPE_ENTRIES);
        class_unregister(&st_sysfs_class);
index 80c0b49f30b01284d1a392dbea76ed8d4a68ab5b..da1e89e95d071aa3837b17ec3718fcc790bbc102 100644 (file)
@@ -11240,7 +11240,7 @@ static int __init ufshcd_core_init(void)
 
        ufs_debugfs_init();
 
-       ret = scsi_register_driver(&ufs_dev_wlun_template.gendrv);
+       ret = scsi_register_driver(&ufs_dev_wlun_template);
        if (ret)
                ufs_debugfs_exit();
        return ret;
@@ -11249,7 +11249,7 @@ static int __init ufshcd_core_init(void)
 static void __exit ufshcd_core_exit(void)
 {
        ufs_debugfs_exit();
-       scsi_unregister_driver(&ufs_dev_wlun_template.gendrv);
+       scsi_unregister_driver(&ufs_dev_wlun_template);
 }
 
 module_init(ufshcd_core_init);
index c0e89996bdb3fddf37b7872417a8da561b0b6da6..40aba9a9349a643e475598504eb74dccc9ca8b18 100644 (file)
@@ -25,9 +25,9 @@ struct scsi_driver {
 
 #define scsi_register_driver(drv) \
        __scsi_register_driver(drv, THIS_MODULE)
-int __scsi_register_driver(struct device_driver *, struct module *);
+int __scsi_register_driver(struct scsi_driver *, struct module *);
 #define scsi_unregister_driver(drv) \
-       driver_unregister(drv);
+       driver_unregister(&(drv)->gendrv);
 
 extern int scsi_register_interface(struct class_interface *);
 #define scsi_unregister_interface(intf) \