Message ID | 20211129154411.561783-1-razor@blackwall.org (mailing list archive) |
---|---|
State | Accepted |
Commit | 6130805066659cda3d685fc4c8d912c72a005ef5 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net-next,v2] net: ipv6: use the new fib6_nh_release_dsts helper in fib6_nh_release | expand |
On 11/29/21 8:44 AM, 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> > --- > v2: no need to check for NULL rt6i_pcpu before calling free_percpu > > net/ipv6/route.c | 20 ++------------------ > 1 file changed, 2 insertions(+), 18 deletions(-) > Reviewed-by: David Ahern <dsahern@kernel.org>
Hello: This patch was applied to netdev/net-next.git (master) by David S. Miller <davem@davemloft.net>: On Mon, 29 Nov 2021 17:44:11 +0200 you 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. > > [...] Here is the summary with links: - [net-next,v2] net: ipv6: use the new fib6_nh_release_dsts helper in fib6_nh_release https://git.kernel.org/netdev/net-next/c/613080506665 You are awesome, thank you!
diff --git a/net/ipv6/route.c b/net/ipv6/route.c index 62f1e16eea2b..f0d29fcb2094 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c @@ -3656,24 +3656,8 @@ 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; - } - } - - free_percpu(fib6_nh->rt6i_pcpu); - } + fib6_nh_release_dsts(fib6_nh); + free_percpu(fib6_nh->rt6i_pcpu); fib_nh_common_release(&fib6_nh->nh_common); }