Message ID | 1469208731-1085-1-git-send-email-mmanning@brocade.com |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
On 7/22/16 11:32 AM, Mike Manning wrote: > Default kernel behavior is to delete IPv6 addresses on link > down, which entails deletion of the multicast and the > subnet-router anycast addresses. These deletions do not > happen with sysctl setting to keep global IPv6 addresses on > link down, so every link down/up causes an increment of the > anycast and multicast refcounts. These bogus refcounts may > stop these addrs from being removed on subsequent calls to > delete them. The solution is to leave the groups for the > multicast and subnet anycast on link down for the callflow > when global IPv6 addresses are kept. > > Fixes: f1705ec197e7 ("net: ipv6: Make address flushing on ifdown optional") > Signed-off-by: Mike Manning <mmanning@brocade.com> Acked-by: David Ahern <dsa@cumulusnetworks.com>
From: Mike Manning <mmanning@brocade.com> Date: Fri, 22 Jul 2016 18:32:11 +0100 > Default kernel behavior is to delete IPv6 addresses on link > down, which entails deletion of the multicast and the > subnet-router anycast addresses. These deletions do not > happen with sysctl setting to keep global IPv6 addresses on > link down, so every link down/up causes an increment of the > anycast and multicast refcounts. These bogus refcounts may > stop these addrs from being removed on subsequent calls to > delete them. The solution is to leave the groups for the > multicast and subnet anycast on link down for the callflow > when global IPv6 addresses are kept. > > Fixes: f1705ec197e7 ("net: ipv6: Make address flushing on ifdown optional") > Signed-off-by: Mike Manning <mmanning@brocade.com> Applied and queued up for -stable, thanks.
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index 47f837a..047c75a 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c @@ -3562,6 +3562,10 @@ restart: if (state != INET6_IFADDR_STATE_DEAD) { __ipv6_ifa_notify(RTM_DELADDR, ifa); inet6addr_notifier_call_chain(NETDEV_DOWN, ifa); + } else { + if (idev->cnf.forwarding) + addrconf_leave_anycast(ifa); + addrconf_leave_solict(ifa->idev, &ifa->addr); } write_lock_bh(&idev->lock);
Default kernel behavior is to delete IPv6 addresses on link down, which entails deletion of the multicast and the subnet-router anycast addresses. These deletions do not happen with sysctl setting to keep global IPv6 addresses on link down, so every link down/up causes an increment of the anycast and multicast refcounts. These bogus refcounts may stop these addrs from being removed on subsequent calls to delete them. The solution is to leave the groups for the multicast and subnet anycast on link down for the callflow when global IPv6 addresses are kept. Fixes: f1705ec197e7 ("net: ipv6: Make address flushing on ifdown optional") Signed-off-by: Mike Manning <mmanning@brocade.com> --- net/ipv6/addrconf.c | 4 ++++ 1 file changed, 4 insertions(+)