]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - net/appletalk/ddp.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[linux.git] / net / appletalk / ddp.c
index 9b6bc5abe94680c0a982b9193932f245080f2f85..795fbc6c06aa7a9e7078aafafad97024373afeb3 100644 (file)
@@ -1910,12 +1910,16 @@ static const char atalk_err_snap[] __initconst =
 /* Called by proto.c on kernel start up */
 static int __init atalk_init(void)
 {
-       int rc = proto_register(&ddp_proto, 0);
+       int rc;
 
-       if (rc != 0)
+       rc = proto_register(&ddp_proto, 0);
+       if (rc)
                goto out;
 
-       (void)sock_register(&atalk_family_ops);
+       rc = sock_register(&atalk_family_ops);
+       if (rc)
+               goto out_proto;
+
        ddp_dl = register_snap_client(ddp_snap_id, atalk_rcv);
        if (!ddp_dl)
                printk(atalk_err_snap);
@@ -1923,12 +1927,33 @@ static int __init atalk_init(void)
        dev_add_pack(&ltalk_packet_type);
        dev_add_pack(&ppptalk_packet_type);
 
-       register_netdevice_notifier(&ddp_notifier);
+       rc = register_netdevice_notifier(&ddp_notifier);
+       if (rc)
+               goto out_sock;
+
        aarp_proto_init();
-       atalk_proc_init();
-       atalk_register_sysctl();
+       rc = atalk_proc_init();
+       if (rc)
+               goto out_aarp;
+
+       rc = atalk_register_sysctl();
+       if (rc)
+               goto out_proc;
 out:
        return rc;
+out_proc:
+       atalk_proc_exit();
+out_aarp:
+       aarp_cleanup_module();
+       unregister_netdevice_notifier(&ddp_notifier);
+out_sock:
+       dev_remove_pack(&ppptalk_packet_type);
+       dev_remove_pack(&ltalk_packet_type);
+       unregister_snap_client(ddp_dl);
+       sock_unregister(PF_APPLETALK);
+out_proto:
+       proto_unregister(&ddp_proto);
+       goto out;
 }
 module_init(atalk_init);