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>
This commit is contained in:
Heiner Kallweit
2026-04-02 20:51:00 +02:00
committed by Niklas Cassel
parent 182caa1736
commit ee1ed7a864
3 changed files with 28 additions and 42 deletions
+2 -9
View File
@@ -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();
+25 -32
View File
@@ -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;
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 = kzalloc_obj(struct ata_internal);
if (!i)
return NULL;
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)
+1 -1
View File
@@ -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);