diff --git a/drivers/scsi/ch.c b/drivers/scsi/ch.c index fa07a6f54003..f2b63e4b9b99 100644 --- a/drivers/scsi/ch.c +++ b/drivers/scsi/ch.c @@ -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); diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c index 99eb0a30df61..db0ba68f2e6e 100644 --- a/drivers/scsi/scsi_sysfs.c +++ b/drivers/scsi/scsi_sysfs.c @@ -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; diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index f50b92e63201..6ea6ee2830a4 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c @@ -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); diff --git a/drivers/scsi/ses.c b/drivers/scsi/ses.c index 2c61624cb4b0..f8f5164f3de2 100644 --- a/drivers/scsi/ses.c +++ b/drivers/scsi/ses.c @@ -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); } diff --git a/drivers/scsi/sr.c b/drivers/scsi/sr.c index add13e306898..2f6bb6355186 100644 --- a/drivers/scsi/sr.c +++ b/drivers/scsi/sr.c @@ -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"); } diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c index 168f25e4aaa3..45622cfce926 100644 --- a/drivers/scsi/st.c +++ b/drivers/scsi/st.c @@ -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); diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c index 80c0b49f30b0..da1e89e95d07 100644 --- a/drivers/ufs/core/ufshcd.c +++ b/drivers/ufs/core/ufshcd.c @@ -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); diff --git a/include/scsi/scsi_driver.h b/include/scsi/scsi_driver.h index c0e89996bdb3..40aba9a9349a 100644 --- a/include/scsi/scsi_driver.h +++ b/include/scsi/scsi_driver.h @@ -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) \