diff options
Diffstat (limited to 'net/ipv6')
-rw-r--r-- | net/ipv6/ip6_fib.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/net/ipv6/ip6_fib.c b/net/ipv6/ip6_fib.c index b6a585909d35..de382114609b 100644 --- a/net/ipv6/ip6_fib.c +++ b/net/ipv6/ip6_fib.c | |||
@@ -1500,15 +1500,18 @@ static void fib6_gc_timer_cb(unsigned long arg) | |||
1500 | 1500 | ||
1501 | static int __net_init fib6_net_init(struct net *net) | 1501 | static int __net_init fib6_net_init(struct net *net) |
1502 | { | 1502 | { |
1503 | size_t size = sizeof(struct hlist_head) * FIB6_TABLE_HASHSZ; | ||
1504 | |||
1503 | setup_timer(&net->ipv6.ip6_fib_timer, fib6_gc_timer_cb, (unsigned long)net); | 1505 | setup_timer(&net->ipv6.ip6_fib_timer, fib6_gc_timer_cb, (unsigned long)net); |
1504 | 1506 | ||
1505 | net->ipv6.rt6_stats = kzalloc(sizeof(*net->ipv6.rt6_stats), GFP_KERNEL); | 1507 | net->ipv6.rt6_stats = kzalloc(sizeof(*net->ipv6.rt6_stats), GFP_KERNEL); |
1506 | if (!net->ipv6.rt6_stats) | 1508 | if (!net->ipv6.rt6_stats) |
1507 | goto out_timer; | 1509 | goto out_timer; |
1508 | 1510 | ||
1509 | net->ipv6.fib_table_hash = kcalloc(FIB6_TABLE_HASHSZ, | 1511 | /* Avoid false sharing : Use at least a full cache line */ |
1510 | sizeof(*net->ipv6.fib_table_hash), | 1512 | size = max_t(size_t, size, L1_CACHE_BYTES); |
1511 | GFP_KERNEL); | 1513 | |
1514 | net->ipv6.fib_table_hash = kzalloc(size, GFP_KERNEL); | ||
1512 | if (!net->ipv6.fib_table_hash) | 1515 | if (!net->ipv6.fib_table_hash) |
1513 | goto out_rt6_stats; | 1516 | goto out_rt6_stats; |
1514 | 1517 | ||