aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv6
diff options
context:
space:
mode:
authorUrsula Braun <ursula.braun@de.ibm.com>2010-10-24 19:06:43 -0400
committerDavid S. Miller <davem@davemloft.net>2010-10-27 14:37:30 -0400
commit853dc2e03ddd0c49885ed55c48755d2b1073122a (patch)
tree04269eb6d7e502ee4db2b3658b0eef22c67d34eb /net/ipv6
parent66c68bcc489fadd4f5e8839e966e3a366e50d1d5 (diff)
ipv6: fix refcnt problem related to POSTDAD state
After running this bonding setup script modprobe bonding miimon=100 mode=0 max_bonds=1 ifconfig bond0 10.1.1.1/16 ifenslave bond0 eth1 ifenslave bond0 eth3 on s390 with qeth-driven slaves, modprobe -r fails with this message unregister_netdevice: waiting for bond0 to become free. Usage count = 1 due to twice detection of duplicate address. Problem is caused by a missing decrease of ifp->refcnt in addrconf_dad_failure. An extra call of in6_ifa_put(ifp) solves it. Problem has been introduced with commit f2344a131bccdbfc5338e17fa71a807dee7944fa. Signed-off-by: Ursula Braun <ursula.braun@de.ibm.com> Cc: David S. Miller <davem@davemloft.net> Cc: Herbert Xu <herbert@gondor.apana.org.au> Acked-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6')
-rw-r--r--net/ipv6/addrconf.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index ef6fc16ae5d9..e048ec62d109 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -1427,8 +1427,10 @@ void addrconf_dad_failure(struct inet6_ifaddr *ifp)
1427{ 1427{
1428 struct inet6_dev *idev = ifp->idev; 1428 struct inet6_dev *idev = ifp->idev;
1429 1429
1430 if (addrconf_dad_end(ifp)) 1430 if (addrconf_dad_end(ifp)) {
1431 in6_ifa_put(ifp);
1431 return; 1432 return;
1433 }
1432 1434
1433 if (net_ratelimit()) 1435 if (net_ratelimit())
1434 printk(KERN_INFO "%s: IPv6 duplicate address %pI6c detected!\n", 1436 printk(KERN_INFO "%s: IPv6 duplicate address %pI6c detected!\n",