Skip to content

Commit ee1ed7a

Browse files
hkallweitfloatious
authored andcommitted
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>
1 parent 182caa1 commit ee1ed7a

3 files changed

Lines changed: 28 additions & 42 deletions

File tree

drivers/ata/libata-core.c

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6779,22 +6779,15 @@ static int __init ata_init(void)
67796779

67806780
libata_transport_init();
67816781
ata_scsi_transport_template = ata_attach_transport();
6782-
if (!ata_scsi_transport_template) {
6783-
ata_sff_exit();
6784-
rc = -ENOMEM;
6785-
goto err_out;
6786-
}
67876782

67886783
printk(KERN_DEBUG "libata version " DRV_VERSION " loaded.\n");
6789-
return 0;
67906784

6791-
err_out:
6792-
return rc;
6785+
return 0;
67936786
}
67946787

67956788
static void __exit ata_exit(void)
67966789
{
6797-
ata_release_transport(ata_scsi_transport_template);
6790+
ata_release_transport();
67986791
libata_transport_exit();
67996792
ata_sff_exit();
68006793
ata_free_force_param();

drivers/ata/libata-transport.c

Lines changed: 25 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -745,6 +745,23 @@ int ata_tlink_add(struct ata_link *link)
745745
return error;
746746
}
747747

748+
static struct ata_internal ata_transport_internal = {
749+
.t.eh_strategy_handler = ata_scsi_error,
750+
.t.user_scan = ata_scsi_user_scan,
751+
752+
.t.host_attrs.ac.class = &ata_port_class.class,
753+
.t.host_attrs.ac.grp = &ata_port_attr_group,
754+
.t.host_attrs.ac.match = ata_tport_match,
755+
756+
.link_attr_cont.ac.class = &ata_link_class.class,
757+
.link_attr_cont.ac.grp = &ata_link_attr_group,
758+
.link_attr_cont.ac.match = ata_tlink_match,
759+
760+
.dev_attr_cont.ac.class = &ata_dev_class.class,
761+
.dev_attr_cont.ac.grp = &ata_device_attr_group,
762+
.dev_attr_cont.ac.match = ata_tdev_match,
763+
};
764+
748765
/*
749766
* Setup / Teardown code
750767
*/
@@ -754,46 +771,22 @@ int ata_tlink_add(struct ata_link *link)
754771
*/
755772
struct scsi_transport_template *ata_attach_transport(void)
756773
{
757-
struct ata_internal *i;
758-
759-
i = kzalloc_obj(struct ata_internal);
760-
if (!i)
761-
return NULL;
774+
transport_container_register(&ata_transport_internal.t.host_attrs);
775+
transport_container_register(&ata_transport_internal.link_attr_cont);
776+
transport_container_register(&ata_transport_internal.dev_attr_cont);
762777

763-
i->t.eh_strategy_handler = ata_scsi_error;
764-
i->t.user_scan = ata_scsi_user_scan;
765-
766-
i->t.host_attrs.ac.class = &ata_port_class.class;
767-
i->t.host_attrs.ac.grp = &ata_port_attr_group;
768-
i->t.host_attrs.ac.match = ata_tport_match;
769-
transport_container_register(&i->t.host_attrs);
770-
771-
i->link_attr_cont.ac.class = &ata_link_class.class;
772-
i->link_attr_cont.ac.grp = &ata_link_attr_group;
773-
i->link_attr_cont.ac.match = ata_tlink_match;
774-
transport_container_register(&i->link_attr_cont);
775-
776-
i->dev_attr_cont.ac.class = &ata_dev_class.class;
777-
i->dev_attr_cont.ac.grp = &ata_device_attr_group;
778-
i->dev_attr_cont.ac.match = ata_tdev_match;
779-
transport_container_register(&i->dev_attr_cont);
780-
781-
return &i->t;
778+
return &ata_transport_internal.t;
782779
}
783780

784781
/**
785782
* ata_release_transport -- release ATA transport template instance
786783
* @t: transport template instance
787784
*/
788-
void ata_release_transport(struct scsi_transport_template *t)
785+
void ata_release_transport(void)
789786
{
790-
struct ata_internal *i = to_ata_internal(t);
791-
792-
transport_container_unregister(&i->t.host_attrs);
793-
transport_container_unregister(&i->link_attr_cont);
794-
transport_container_unregister(&i->dev_attr_cont);
795-
796-
kfree(i);
787+
transport_container_unregister(&ata_transport_internal.t.host_attrs);
788+
transport_container_unregister(&ata_transport_internal.link_attr_cont);
789+
transport_container_unregister(&ata_transport_internal.dev_attr_cont);
797790
}
798791

799792
__init int libata_transport_init(void)

drivers/ata/libata-transport.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ int ata_tlink_add(struct ata_link *link);
99
void ata_tlink_delete(struct ata_link *link);
1010

1111
struct scsi_transport_template *ata_attach_transport(void);
12-
void ata_release_transport(struct scsi_transport_template *t);
12+
void ata_release_transport(void);
1313

1414
__init int libata_transport_init(void);
1515
void __exit libata_transport_exit(void);

0 commit comments

Comments
 (0)