diff mbox

[1/1,BUG_FIX] ipv6: fix refcnt problem related to POSTDAD state

Message ID 20101025090716.315678235@linux.vnet.ibm.com
State Accepted, archived
Delegated to: David Miller
Headers show

Commit Message

Ursula Braun Oct. 25, 2010, 9:06 a.m. UTC
Subject: [patch 1/1] [PATCH BUG_FIX] ipv6: fix refcnt problem related to POSTDAD state

From: Ursula Braun <ursula.braun@de.ibm.com>

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>

---
 net/ipv6/addrconf.c |    4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)


--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Herbert Xu Oct. 25, 2010, 11:01 p.m. UTC | #1
On Mon, Oct 25, 2010 at 11:06:43AM +0200, Ursula Braun wrote:
> Subject: [patch 1/1] [PATCH BUG_FIX] ipv6: fix refcnt problem related to POSTDAD state
> 
> From: Ursula Braun <ursula.braun@de.ibm.com>
> 
> 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>

Acked-by: Herbert Xu <herbert@gondor.apana.org.au>

Thanks for catching this!
David Miller Oct. 27, 2010, 6:10 p.m. UTC | #2
From: Herbert Xu <herbert@gondor.apana.org.au>
Date: Mon, 25 Oct 2010 16:01:32 -0700

> On Mon, Oct 25, 2010 at 11:06:43AM +0200, Ursula Braun wrote:
>> Subject: [patch 1/1] [PATCH BUG_FIX] ipv6: fix refcnt problem related to POSTDAD state
>> 
>> From: Ursula Braun <ursula.braun@de.ibm.com>
>> 
>> 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>
> 
> Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
> 
> Thanks for catching this!

Applied, thanks everyone.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -1426,8 +1426,10 @@  void addrconf_dad_failure(struct inet6_i
 {
 	struct inet6_dev *idev = ifp->idev;
 
-	if (addrconf_dad_end(ifp))
+	if (addrconf_dad_end(ifp)) {
+		in6_ifa_put(ifp);
 		return;
+	}
 
 	if (net_ratelimit())
 		printk(KERN_INFO "%s: IPv6 duplicate address %pI6c detected!\n",