diff options
| author | Heiner Kallweit <hkallweit1@gmail.com> | 2026-04-02 15:29:21 +0200 |
|---|---|---|
| committer | Niklas Cassel <cassel@kernel.org> | 2026-04-02 20:51:00 +0200 |
| commit | ee1ed7a864389ba727ac9b3549beab08e3966735 (patch) | |
| tree | 04a6f0251db0c4352277ead9650cd873b99620d7 /drivers/ata | |
| parent | 182caa17360dd48e6df08e18f00ebda0be87ab24 (diff) | |
| download | linux-next-ee1ed7a864389ba727ac9b3549beab08e3966735.tar.gz linux-next-ee1ed7a864389ba727ac9b3549beab08e3966735.zip | |
ata: libata-transport: instantiate struct ata_internal statically
Struct ata_internal is only instantiated once, in module init code.
So we can also instantiate it statically, which allows simplifying
the code.
Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: Niklas Cassel <cassel@kernel.org>
Diffstat (limited to 'drivers/ata')
| -rw-r--r-- | drivers/ata/libata-core.c | 11 | ||||
| -rw-r--r-- | drivers/ata/libata-transport.c | 57 | ||||
| -rw-r--r-- | drivers/ata/libata-transport.h | 2 |
3 files changed, 28 insertions, 42 deletions
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 81479ddb83b1..ae56567af769 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -6779,22 +6779,15 @@ static int __init ata_init(void) libata_transport_init(); ata_scsi_transport_template = ata_attach_transport(); - if (!ata_scsi_transport_template) { - ata_sff_exit(); - rc = -ENOMEM; - goto err_out; - } printk(KERN_DEBUG "libata version " DRV_VERSION " loaded.\n"); - return 0; -err_out: - return rc; + return 0; } static void __exit ata_exit(void) { - ata_release_transport(ata_scsi_transport_template); + ata_release_transport(); libata_transport_exit(); ata_sff_exit(); ata_free_force_param(); diff --git a/drivers/ata/libata-transport.c b/drivers/ata/libata-transport.c index 7ad18026547b..0c7ce278ece3 100644 --- a/drivers/ata/libata-transport.c +++ b/drivers/ata/libata-transport.c @@ -745,6 +745,23 @@ int ata_tlink_add(struct ata_link *link) return error; } +static struct ata_internal ata_transport_internal = { + .t.eh_strategy_handler = ata_scsi_error, + .t.user_scan = ata_scsi_user_scan, + + .t.host_attrs.ac.class = &ata_port_class.class, + .t.host_attrs.ac.grp = &ata_port_attr_group, + .t.host_attrs.ac.match = ata_tport_match, + + .link_attr_cont.ac.class = &ata_link_class.class, + .link_attr_cont.ac.grp = &ata_link_attr_group, + .link_attr_cont.ac.match = ata_tlink_match, + + .dev_attr_cont.ac.class = &ata_dev_class.class, + .dev_attr_cont.ac.grp = &ata_device_attr_group, + .dev_attr_cont.ac.match = ata_tdev_match, +}; + /* * Setup / Teardown code */ @@ -754,46 +771,22 @@ int ata_tlink_add(struct ata_link *link) */ struct scsi_transport_template *ata_attach_transport(void) { - struct ata_internal *i; - - i = kzalloc_obj(struct ata_internal); - if (!i) - return NULL; + transport_container_register(&ata_transport_internal.t.host_attrs); + transport_container_register(&ata_transport_internal.link_attr_cont); + transport_container_register(&ata_transport_internal.dev_attr_cont); - i->t.eh_strategy_handler = ata_scsi_error; - i->t.user_scan = ata_scsi_user_scan; - - i->t.host_attrs.ac.class = &ata_port_class.class; - i->t.host_attrs.ac.grp = &ata_port_attr_group; - i->t.host_attrs.ac.match = ata_tport_match; - transport_container_register(&i->t.host_attrs); - - i->link_attr_cont.ac.class = &ata_link_class.class; - i->link_attr_cont.ac.grp = &ata_link_attr_group; - i->link_attr_cont.ac.match = ata_tlink_match; - transport_container_register(&i->link_attr_cont); - - i->dev_attr_cont.ac.class = &ata_dev_class.class; - i->dev_attr_cont.ac.grp = &ata_device_attr_group; - i->dev_attr_cont.ac.match = ata_tdev_match; - transport_container_register(&i->dev_attr_cont); - - return &i->t; + return &ata_transport_internal.t; } /** * ata_release_transport -- release ATA transport template instance * @t: transport template instance */ -void ata_release_transport(struct scsi_transport_template *t) +void ata_release_transport(void) { - struct ata_internal *i = to_ata_internal(t); - - transport_container_unregister(&i->t.host_attrs); - transport_container_unregister(&i->link_attr_cont); - transport_container_unregister(&i->dev_attr_cont); - - kfree(i); + transport_container_unregister(&ata_transport_internal.t.host_attrs); + transport_container_unregister(&ata_transport_internal.link_attr_cont); + transport_container_unregister(&ata_transport_internal.dev_attr_cont); } __init int libata_transport_init(void) diff --git a/drivers/ata/libata-transport.h b/drivers/ata/libata-transport.h index 50cd2cbe8eea..a464b8fcd941 100644 --- a/drivers/ata/libata-transport.h +++ b/drivers/ata/libata-transport.h @@ -9,7 +9,7 @@ int ata_tlink_add(struct ata_link *link); void ata_tlink_delete(struct ata_link *link); struct scsi_transport_template *ata_attach_transport(void); -void ata_release_transport(struct scsi_transport_template *t); +void ata_release_transport(void); __init int libata_transport_init(void); void __exit libata_transport_exit(void); |
