diff options
author | Akinobu Mita <akinobu.mita@gmail.com> | 2007-04-21 05:36:26 -0400 |
---|---|---|
committer | Stefan Richter <stefanr@s5r6.in-berlin.de> | 2007-04-29 18:00:32 -0400 |
commit | 809e905ce73eaa13972c2617959f8ec16e7d0d6f (patch) | |
tree | 7aa0bf419a76c0c80802c599f8506dc1ae17d9fc /drivers | |
parent | fdc0092bfd68cedfb9929256957f64c2c2760b5c (diff) |
ieee1394: eth1394: fix error path in module_init
This patch fixes some error handlings in eth1394:
- check return value of kmem_cache_create()
- cleanup resources if hpsb_register_protocol() fails
Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de> (whitespace)
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/ieee1394/eth1394.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/drivers/ieee1394/eth1394.c b/drivers/ieee1394/eth1394.c index 1c26322c25af..bd67c862099e 100644 --- a/drivers/ieee1394/eth1394.c +++ b/drivers/ieee1394/eth1394.c | |||
@@ -1667,17 +1667,26 @@ static struct ethtool_ops ethtool_ops = { | |||
1667 | .get_drvinfo = ether1394_get_drvinfo | 1667 | .get_drvinfo = ether1394_get_drvinfo |
1668 | }; | 1668 | }; |
1669 | 1669 | ||
1670 | static int __init ether1394_init_module (void) | 1670 | static int __init ether1394_init_module(void) |
1671 | { | 1671 | { |
1672 | int err; | ||
1673 | |||
1672 | packet_task_cache = kmem_cache_create("packet_task", | 1674 | packet_task_cache = kmem_cache_create("packet_task", |
1673 | sizeof(struct packet_task), | 1675 | sizeof(struct packet_task), |
1674 | 0, 0, NULL, NULL); | 1676 | 0, 0, NULL, NULL); |
1677 | if (!packet_task_cache) | ||
1678 | return -ENOMEM; | ||
1675 | 1679 | ||
1676 | hpsb_register_highlevel(ð1394_highlevel); | 1680 | hpsb_register_highlevel(ð1394_highlevel); |
1677 | return hpsb_register_protocol(ð1394_proto_driver); | 1681 | err = hpsb_register_protocol(ð1394_proto_driver); |
1682 | if (err) { | ||
1683 | hpsb_unregister_highlevel(ð1394_highlevel); | ||
1684 | kmem_cache_destroy(packet_task_cache); | ||
1685 | } | ||
1686 | return err; | ||
1678 | } | 1687 | } |
1679 | 1688 | ||
1680 | static void __exit ether1394_exit_module (void) | 1689 | static void __exit ether1394_exit_module(void) |
1681 | { | 1690 | { |
1682 | hpsb_unregister_protocol(ð1394_proto_driver); | 1691 | hpsb_unregister_protocol(ð1394_proto_driver); |
1683 | hpsb_unregister_highlevel(ð1394_highlevel); | 1692 | hpsb_unregister_highlevel(ð1394_highlevel); |