This patch allocates the rt6_stats struct dynamically when
the fib6 is initialized. That provides the ability to create
several instances of this structure for the network namespaces.
Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com>
Signed-off-by: Benjamin Thery <benjamin.thery@bull.net>
---
net/ipv6/ip6_fib.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
Index: linux-2.6-netns/net/ipv6/ip6_fib.c
===================================================================
--- linux-2.6-netns.orig/net/ipv6/ip6_fib.c
+++ linux-2.6-netns/net/ipv6/ip6_fib.c
@@ -48,8 +48,7 @@
#define RT6_TRACE(x...) do { ; } while (0)
#endif
-static struct rt6_statistics __rt6_stats;
-struct rt6_statistics *rt6_stats = &__rt6_stats;
+struct rt6_statistics *rt6_stats;
static struct kmem_cache * fib6_node_kmem __read_mostly;
@@ -1544,6 +1543,10 @@ void __init fib6_init(void)
sizeof(struct fib6_node),
0, SLAB_HWCACHE_ALIGN|SLAB_PANIC,
NULL);
+
+ rt6_stats = kzalloc(sizeof(*rt6_stats), GFP_KERNEL);
+ if (!rt6_stats)
+ panic("IPV6: failed to allocate rt6_stats.\n");
register_pernet_subsys(&fib6_net_ops);
__rtnl_register(PF_INET6, RTM_GETROUTE, NULL, inet6_dump_fib);
@@ -1552,5 +1555,6 @@ void __init fib6_init(void)
void fib6_gc_cleanup(void)
{
unregister_pernet_subsys(&fib6_net_ops);
+ kfree(rt6_stats);
kmem_cache_destroy(fib6_node_kmem);
}
--
_______________________________________________
Containers mailing list
Containers@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/containers