diff options
| author | Sabrina Dubroca <sd@queasysnail.net> | 2014-09-10 23:23:02 +0200 |
|---|---|---|
| committer | Moyster <oysterized@gmail.com> | 2016-11-17 12:12:23 +0100 |
| commit | 4aed4f5eb5d904dbd14b91e576baeabd20d6bd0a (patch) | |
| tree | 56e7fb279431293f01282a0fd7a64cf55d0895c9 /include/net | |
| parent | c2cdf59f23781deb3f9c973df4ef895cbf88ee0d (diff) | |
ipv6: clean up anycast when an interface is destroyed
If we try to rmmod the driver for an interface while sockets with
setsockopt(JOIN_ANYCAST) are alive, some refcounts aren't cleaned up
and we get stuck on:
unregister_netdevice: waiting for ens3 to become free. Usage count = 1
If we LEAVE_ANYCAST/close everything before rmmod'ing, there is no
problem.
We need to perform a cleanup similar to the one for multicast in
addrconf_ifdown(how == 1).
BUG: 18902601
Bug: 19100303
Change-Id: I6d51aed5755eb5738fcba91950e7773a1c985d2e
Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Patrick Tjin <pattjin@google.com>
Diffstat (limited to 'include/net')
| -rw-r--r-- | include/net/addrconf.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/include/net/addrconf.h b/include/net/addrconf.h index cfa6b2ebf..9261e6c72 100644 --- a/include/net/addrconf.h +++ b/include/net/addrconf.h @@ -203,7 +203,7 @@ extern int ipv6_dev_ac_inc(struct net_device *dev, const struct in6_addr *addr); extern int __ipv6_dev_ac_dec(struct inet6_dev *idev, const struct in6_addr *addr); extern bool ipv6_chk_acast_addr(struct net *net, struct net_device *dev, const struct in6_addr *addr); - +extern void ipv6_ac_destroy_dev(struct inet6_dev *idev); /* Device notifier */ extern int register_inet6addr_notifier(struct notifier_block *nb); |
