ipv6: Move pcpu cached routes to fib6_nh
rt6_info are specific instances of a fib entry and are tied to a device and gateway - ie., a nexthop. Before nexthop objects, IPv6 fib entries have separate fib6_info for each nexthop in a multipath route, so the location of the pcpu cache in the fib6_info struct worked. However, with nexthop objects a fib6_info can point to a set of nexthops (yet another alignment of ipv6 with ipv4). Accordingly, the pcpu cache needs to be moved to the fib6_nh struct so the cached entries are local to the nexthop specification used to create the rt6_info. Initialization and free of the pcpu entries moved to fib6_nh_init and fib6_nh_release. Change in location only, from fib6_info down to fib6_nh; no other functional change intended. Signed-off-by: David Ahern <dsahern@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
daeceb2df3
commit
f40b6ae2b6
@@ -6341,16 +6341,16 @@ void addrconf_disable_policy_idev(struct inet6_dev *idev, int val)
|
||||
list_for_each_entry(ifa, &idev->addr_list, if_list) {
|
||||
spin_lock(&ifa->lock);
|
||||
if (ifa->rt) {
|
||||
struct fib6_info *rt = ifa->rt;
|
||||
struct fib6_nh *nh = &ifa->rt->fib6_nh;
|
||||
int cpu;
|
||||
|
||||
rcu_read_lock();
|
||||
ifa->rt->dst_nopolicy = val ? true : false;
|
||||
if (rt->rt6i_pcpu) {
|
||||
if (nh->rt6i_pcpu) {
|
||||
for_each_possible_cpu(cpu) {
|
||||
struct rt6_info **rtp;
|
||||
|
||||
rtp = per_cpu_ptr(rt->rt6i_pcpu, cpu);
|
||||
rtp = per_cpu_ptr(nh->rt6i_pcpu, cpu);
|
||||
addrconf_set_nopolicy(*rtp, val);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user