summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAkinobu Mita <akinobu.mita@gmail.com>2007-04-21 11:36:26 +0200
committerStefan Richter <stefanr@s5r6.in-berlin.de>2007-04-30 00:00:32 +0200
commit809e905ce73eaa13972c2617959f8ec16e7d0d6f (patch)
tree7aa0bf419a76c0c80802c599f8506dc1ae17d9fc
parentieee1394: eth1394: correct return codes in hard_start_xmit (diff)
downloadlinux-809e905ce73eaa13972c2617959f8ec16e7d0d6f.tar.xz
linux-809e905ce73eaa13972c2617959f8ec16e7d0d6f.zip
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)
-rw-r--r--drivers/ieee1394/eth1394.c15
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 = {
.get_drvinfo = ether1394_get_drvinfo
};
-static int __init ether1394_init_module (void)
+static int __init ether1394_init_module(void)
{
+ int err;
+
packet_task_cache = kmem_cache_create("packet_task",
sizeof(struct packet_task),
0, 0, NULL, NULL);
+ if (!packet_task_cache)
+ return -ENOMEM;
hpsb_register_highlevel(&eth1394_highlevel);
- return hpsb_register_protocol(&eth1394_proto_driver);
+ err = hpsb_register_protocol(&eth1394_proto_driver);
+ if (err) {
+ hpsb_unregister_highlevel(&eth1394_highlevel);
+ kmem_cache_destroy(packet_task_cache);
+ }
+ return err;
}
-static void __exit ether1394_exit_module (void)
+static void __exit ether1394_exit_module(void)
{
hpsb_unregister_protocol(&eth1394_proto_driver);
hpsb_unregister_highlevel(&eth1394_highlevel);