diff options
author | David S. Miller <davem@davemloft.net> | 2012-06-15 18:51:55 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-06-15 18:51:55 -0400 |
commit | 7e52b33bd50faa866bc3e6e97e68438bc5e52251 (patch) | |
tree | 46e68adf23f4f170a0eb5045c33a76234de6cf92 /net/ipv6/route.c | |
parent | 91c8028c95a468da9c0aafd2d91cf24e27784206 (diff) | |
parent | 2a0c451ade8e1783c5d453948289e4a978d417c9 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts:
net/ipv6/route.c
This deals with a merge conflict between the net-next addition of the
inetpeer network namespace ops, and Thomas Graf's bug fix in
2a0c451ade8e1783c5d453948289e4a978d417c9 which makes sure we don't
register /proc/net/ipv6_route before it is actually safe to do so.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6/route.c')
-rw-r--r-- | net/ipv6/route.c | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/net/ipv6/route.c b/net/ipv6/route.c index 0d41f68daff2..c7ccc36ba63e 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c | |||
@@ -2974,13 +2974,17 @@ int __init ip6_route_init(void) | |||
2974 | if (ret) | 2974 | if (ret) |
2975 | goto out_kmem_cache; | 2975 | goto out_kmem_cache; |
2976 | 2976 | ||
2977 | ret = register_pernet_subsys(&ip6_route_net_ops); | 2977 | ret = fib6_init(); |
2978 | if (ret) | 2978 | if (ret) |
2979 | goto out_dst_entries; | 2979 | goto out_dst_entries; |
2980 | 2980 | ||
2981 | ret = register_pernet_subsys(&ipv6_inetpeer_ops); | 2981 | ret = register_pernet_subsys(&ipv6_inetpeer_ops); |
2982 | if (ret) | 2982 | if (ret) |
2983 | goto out_register_subsys; | 2983 | goto out_fib6_init; |
2984 | |||
2985 | ret = register_pernet_subsys(&ip6_route_net_ops); | ||
2986 | if (ret) | ||
2987 | goto out_register_inetpeer; | ||
2984 | 2988 | ||
2985 | ip6_dst_blackhole_ops.kmem_cachep = ip6_dst_ops_template.kmem_cachep; | 2989 | ip6_dst_blackhole_ops.kmem_cachep = ip6_dst_ops_template.kmem_cachep; |
2986 | 2990 | ||
@@ -2995,13 +2999,13 @@ int __init ip6_route_init(void) | |||
2995 | init_net.ipv6.ip6_blk_hole_entry->dst.dev = init_net.loopback_dev; | 2999 | init_net.ipv6.ip6_blk_hole_entry->dst.dev = init_net.loopback_dev; |
2996 | init_net.ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev); | 3000 | init_net.ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev); |
2997 | #endif | 3001 | #endif |
2998 | ret = fib6_init(); | 3002 | ret = fib6_init_late(); |
2999 | if (ret) | 3003 | if (ret) |
3000 | goto out_register_inetpeer; | 3004 | goto out_register_subsys; |
3001 | 3005 | ||
3002 | ret = xfrm6_init(); | 3006 | ret = xfrm6_init(); |
3003 | if (ret) | 3007 | if (ret) |
3004 | goto out_fib6_init; | 3008 | goto out_fib6_init_late; |
3005 | 3009 | ||
3006 | ret = fib6_rules_init(); | 3010 | ret = fib6_rules_init(); |
3007 | if (ret) | 3011 | if (ret) |
@@ -3024,12 +3028,14 @@ fib6_rules_init: | |||
3024 | fib6_rules_cleanup(); | 3028 | fib6_rules_cleanup(); |
3025 | xfrm6_init: | 3029 | xfrm6_init: |
3026 | xfrm6_fini(); | 3030 | xfrm6_fini(); |
3027 | out_fib6_init: | 3031 | out_fib6_init_late: |
3028 | fib6_gc_cleanup(); | 3032 | fib6_cleanup_late(); |
3029 | out_register_inetpeer: | ||
3030 | unregister_pernet_subsys(&ipv6_inetpeer_ops); | ||
3031 | out_register_subsys: | 3033 | out_register_subsys: |
3032 | unregister_pernet_subsys(&ip6_route_net_ops); | 3034 | unregister_pernet_subsys(&ip6_route_net_ops); |
3035 | out_register_inetpeer: | ||
3036 | unregister_pernet_subsys(&ipv6_inetpeer_ops); | ||
3037 | out_fib6_init: | ||
3038 | fib6_gc_cleanup(); | ||
3033 | out_dst_entries: | 3039 | out_dst_entries: |
3034 | dst_entries_destroy(&ip6_dst_blackhole_ops); | 3040 | dst_entries_destroy(&ip6_dst_blackhole_ops); |
3035 | out_kmem_cache: | 3041 | out_kmem_cache: |