Message ID | 20211129120935.461678-1-razor@blackwall.org (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net-next] net: ipv6: use the new fib6_nh_release_dsts helper in fib6_nh_release | expand |
On 29/11/2021 14:09, Nikolay Aleksandrov wrote: > From: Nikolay Aleksandrov <nikolay@nvidia.com> > > We can remove a bit of code duplication by reusing the new > fib6_nh_release_dsts helper in fib6_nh_release. Their only difference is > that fib6_nh_release's version doesn't use atomic operation to swap the > pointers because it assumes the fib6_nh is no longer visible, while > fib6_nh_release_dsts can be used anywhere. > > Suggested-by: David Ahern <dsahern@gmail.com> > Signed-off-by: Nikolay Aleksandrov <nikolay@nvidia.com> > --- > net/ipv6/route.c | 19 ++----------------- > 1 file changed, 2 insertions(+), 17 deletions(-) > > diff --git a/net/ipv6/route.c b/net/ipv6/route.c > index 62f1e16eea2b..b44438b9a030 100644 > --- a/net/ipv6/route.c > +++ b/net/ipv6/route.c > @@ -3656,24 +3656,9 @@ void fib6_nh_release(struct fib6_nh *fib6_nh) > > rcu_read_unlock(); > > - if (fib6_nh->rt6i_pcpu) { > - int cpu; > - > - for_each_possible_cpu(cpu) { > - struct rt6_info **ppcpu_rt; > - struct rt6_info *pcpu_rt; > - > - ppcpu_rt = per_cpu_ptr(fib6_nh->rt6i_pcpu, cpu); > - pcpu_rt = *ppcpu_rt; > - if (pcpu_rt) { > - dst_dev_put(&pcpu_rt->dst); > - dst_release(&pcpu_rt->dst); > - *ppcpu_rt = NULL; > - } > - } > - > + fib6_nh_release_dsts(fib6_nh); > + if (fib6_nh->rt6i_pcpu) Actually I can even drop the conditional here, free_percpu() is a noop if called with NULL. Will respin in a few..
diff --git a/net/ipv6/route.c b/net/ipv6/route.c index 62f1e16eea2b..b44438b9a030 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c @@ -3656,24 +3656,9 @@ void fib6_nh_release(struct fib6_nh *fib6_nh) rcu_read_unlock(); - if (fib6_nh->rt6i_pcpu) { - int cpu; - - for_each_possible_cpu(cpu) { - struct rt6_info **ppcpu_rt; - struct rt6_info *pcpu_rt; - - ppcpu_rt = per_cpu_ptr(fib6_nh->rt6i_pcpu, cpu); - pcpu_rt = *ppcpu_rt; - if (pcpu_rt) { - dst_dev_put(&pcpu_rt->dst); - dst_release(&pcpu_rt->dst); - *ppcpu_rt = NULL; - } - } - + fib6_nh_release_dsts(fib6_nh); + if (fib6_nh->rt6i_pcpu) free_percpu(fib6_nh->rt6i_pcpu); - } fib_nh_common_release(&fib6_nh->nh_common); }