ipv6: anycast: complete RCU handling of struct ifacaddr6
authorEric Dumazet <edumazet@google.com>
Fri, 23 Feb 2024 20:10:54 +0000 (20:10 +0000)
committerJakub Kicinski <kuba@kernel.org>
Tue, 27 Feb 2024 02:40:34 +0000 (18:40 -0800)
commitc3718936ec47ae811a7ce9a618b6cb1cda835bab
tree4b47a535bf11c39127630a3419a1498e7923e5cd
parent5c237967e632c81db0504cffa26eaa19e7940650
ipv6: anycast: complete RCU handling of struct ifacaddr6

struct ifacaddr6 are already freed after RCU grace period.

Add __rcu qualifier to aca_next pointer, and idev->ac_list

Add relevant rcu_assign_pointer() and dereference accessors.

ipv6_chk_acast_dev() no longer needs to acquire idev->lock.

/proc/net/anycast6 is now purely RCU protected, it no
longer acquires idev->lock.

Similarly in6_dump_addrs() can use RCU protection to iterate
through anycast addresses. It was relying on a mixture of RCU
and RTNL but next patches will get rid of RTNL there.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Link: https://lore.kernel.org/r/20240223201054.220534-1-edumazet@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
include/net/if_inet6.h
net/ipv6/addrconf.c
net/ipv6/anycast.c