]> err.no Git - linux-2.6/commitdiff
[NETNS][IPV6] Move sysctl initialization later on in the IPv6 init sequence
authorBenjamin Thery <benjamin.thery@bull.net>
Wed, 5 Mar 2008 18:45:36 +0000 (10:45 -0800)
committerDavid S. Miller <davem@davemloft.net>
Wed, 5 Mar 2008 18:45:36 +0000 (10:45 -0800)
This patch moves initialization of IPv6 sysctl stuff at the end of
IPv6 initialization.

This will be helpful for network namespaces where some sysctl entries
depend on per-namespace variables, that need to be allocated and
initialized before they are referenced by sysctl.

Signed-off-by: Benjamin Thery <benjamin.thery@bull.net>
Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv6/af_inet6.c

index 60b8a22540461a2799592c04032071cf0fc818ea..af5b3078766214d95fac9b3bef55183a06c1084f 100644 (file)
@@ -934,12 +934,6 @@ static int __init inet6_init(void)
        err = register_pernet_subsys(&inet6_net_ops);
        if (err)
                goto register_pernet_fail;
-
-#ifdef CONFIG_SYSCTL
-       err = ipv6_sysctl_register();
-       if (err)
-               goto sysctl_fail;
-#endif
        err = icmpv6_init();
        if (err)
                goto icmp_fail;
@@ -1006,9 +1000,19 @@ static int __init inet6_init(void)
        err = ipv6_packet_init();
        if (err)
                goto ipv6_packet_fail;
+
+#ifdef CONFIG_SYSCTL
+       err = ipv6_sysctl_register();
+       if (err)
+               goto sysctl_fail;
+#endif
 out:
        return err;
 
+#ifdef CONFIG_SYSCTL
+sysctl_fail:
+       ipv6_packet_cleanup();
+#endif
 ipv6_packet_fail:
        tcpv6_exit();
 tcpv6_fail:
@@ -1050,10 +1054,6 @@ igmp_fail:
 ndisc_fail:
        icmpv6_cleanup();
 icmp_fail:
-#ifdef CONFIG_SYSCTL
-       ipv6_sysctl_unregister();
-sysctl_fail:
-#endif
        unregister_pernet_subsys(&inet6_net_ops);
 register_pernet_fail:
        cleanup_ipv6_mibs();
@@ -1083,6 +1083,9 @@ static void __exit inet6_exit(void)
        /* Disallow any further netlink messages */
        rtnl_unregister_all(PF_INET6);
 
+#ifdef CONFIG_SYSCTL
+       ipv6_sysctl_unregister();
+#endif
        udpv6_exit();
 #ifdef CONFIG_IP_UDPLITE
        udplitev6_exit();
@@ -1112,9 +1115,7 @@ static void __exit inet6_exit(void)
        ndisc_cleanup();
        icmpv6_cleanup();
        rawv6_exit();
-#ifdef CONFIG_SYSCTL
-       ipv6_sysctl_unregister();
-#endif
+
        unregister_pernet_subsys(&inet6_net_ops);
        cleanup_ipv6_mibs();
        proto_unregister(&rawv6_prot);