ieee1394: eth1394: fix error path in module_init
authorAkinobu Mita <akinobu.mita@gmail.com>
Sat, 21 Apr 2007 09:36:26 +0000 (18:36 +0900)
committerStefan Richter <stefanr@s5r6.in-berlin.de>
Sun, 29 Apr 2007 22:00:32 +0000 (00:00 +0200)
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)
drivers/ieee1394/eth1394.c

index 1c26322..bd67c86 100644 (file)
@@ -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);