From 5fdf59f10319c0d776005bc96474901ce3f48ae7 Mon Sep 17 00:00:00 2001 From: Daniel Lezcano Date: Tue, 4 Mar 2008 13:45:33 -0800 Subject: [PATCH] --- yaml --- r: 90015 b: refs/heads/master c: cdb1876192dbe680b3ac955717fdf7f863c1762d h: refs/heads/master i: 90013: 4878fc59fe02f73338d1b1f57a52f3de554fa96c 90011: bd3a18d52fec3720f65c046575fb7963683ec0fe 90007: f5491e8d83cb8cecdbc4b1284114d43bbf3555a3 89999: b250759b5d9d879ba9892914051c855892b94956 89983: d18b1fad3720b025c860f2d43e21b42eeb31724e v: v3 --- [refs] | 2 +- trunk/net/ipv6/route.c | 70 ++++++++++++++++-------------------------- 2 files changed, 28 insertions(+), 44 deletions(-) diff --git a/[refs] b/[refs] index c591c06e44c7..45fdcd6fa512 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 83321d6b9872b94604e481a79dc2c8acbe4ece31 +refs/heads/master: cdb1876192dbe680b3ac955717fdf7f863c1762d diff --git a/trunk/net/ipv6/route.c b/trunk/net/ipv6/route.c index 3afc3f41f2d5..5d9d293156cd 100644 --- a/trunk/net/ipv6/route.c +++ b/trunk/net/ipv6/route.c @@ -2377,40 +2377,6 @@ static const struct file_operations rt6_stats_seq_fops = { .llseek = seq_lseek, .release = single_release, }; - -static int ipv6_route_proc_init(struct net *net) -{ - int ret = -ENOMEM; - if (!proc_net_fops_create(net, "ipv6_route", - 0, &ipv6_route_proc_fops)) - goto out; - - if (!proc_net_fops_create(net, "rt6_stats", - S_IRUGO, &rt6_stats_seq_fops)) - goto out_ipv6_route; - - ret = 0; -out: - return ret; -out_ipv6_route: - proc_net_remove(net, "ipv6_route"); - goto out; -} - -static void ipv6_route_proc_fini(struct net *net) -{ - proc_net_remove(net, "ipv6_route"); - proc_net_remove(net, "rt6_stats"); -} -#else -static inline int ipv6_route_proc_init(struct net *net) -{ - return 0; -} -static inline void ipv6_route_proc_fini(struct net *net) -{ - return ; -} #endif /* CONFIG_PROC_FS */ #ifdef CONFIG_SYSCTL @@ -2544,6 +2510,28 @@ struct ctl_table *ipv6_route_sysctl_init(struct net *net) } #endif +static int ip6_route_net_init(struct net *net) +{ +#ifdef CONFIG_PROC_FS + proc_net_fops_create(net, "ipv6_route", 0, &ipv6_route_proc_fops); + proc_net_fops_create(net, "rt6_stats", S_IRUGO, &rt6_stats_seq_fops); +#endif + return 0; +} + +static void ip6_route_net_exit(struct net *net) +{ +#ifdef CONFIG_PROC_FS + proc_net_remove(net, "ipv6_route"); + proc_net_remove(net, "rt6_stats"); +#endif +} + +static struct pernet_operations ip6_route_net_ops = { + .init = ip6_route_net_init, + .exit = ip6_route_net_exit, +}; + int __init ip6_route_init(void) { int ret; @@ -2560,13 +2548,9 @@ int __init ip6_route_init(void) if (ret) goto out_kmem_cache; - ret = ipv6_route_proc_init(&init_net); - if (ret) - goto out_fib6_init; - ret = xfrm6_init(); if (ret) - goto out_proc_init; + goto out_fib6_init; ret = fib6_rules_init(); if (ret) @@ -2578,7 +2562,9 @@ int __init ip6_route_init(void) __rtnl_register(PF_INET6, RTM_GETROUTE, inet6_rtm_getroute, NULL)) goto fib6_rules_init; - ret = 0; + ret = register_pernet_subsys(&ip6_route_net_ops); + if (ret) + goto fib6_rules_init; out: return ret; @@ -2586,8 +2572,6 @@ int __init ip6_route_init(void) fib6_rules_cleanup(); xfrm6_init: xfrm6_fini(); -out_proc_init: - ipv6_route_proc_fini(&init_net); out_fib6_init: rt6_ifdown(&init_net, NULL); fib6_gc_cleanup(); @@ -2598,8 +2582,8 @@ int __init ip6_route_init(void) void ip6_route_cleanup(void) { + unregister_pernet_subsys(&ip6_route_net_ops); fib6_rules_cleanup(); - ipv6_route_proc_fini(&init_net); xfrm6_fini(); rt6_ifdown(&init_net, NULL); fib6_gc_cleanup();