blob: 3f3a696807737f555b1d36395f5b37f8158caa0b [file] [log] [blame]
From shemminger@osdl.org Tue Oct 11 13:37:00 2005
Date: Tue, 11 Oct 2005 13:33:28 -0700
From: Stephen Hemminger <shemminger@osdl.org>
To: Ryan Harper <ryanh@us.ibm.com>, "David S. Miller" <davem@davemloft.net>
Cc: netdev@oss.sgi.com, Chris Wright <chrisw@osdl.org>, Greg KH <greg@kroah.com>
Subject: [PATCH] br: fix race on bridge del if
This fixes the RCU race on bridge delete interface. Basically,
the network device has to be detached from the bridge in the first
step (pre-RCU), rather than later. At that point, no more bridge traffic
will come in, and the other code will not think that network device
is part of a bridge.
This should also fix the XEN test problems. If there is another
2.6.13-stable, add it as well.
Signed-off-by: Stephen Hemminger <shemminger@osdl.org>
Signed-off-by: Chris Wright <chrisw@osdl.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
net/bridge/br_if.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- linux-2.6.13.4.orig/net/bridge/br_if.c
+++ linux-2.6.13.4/net/bridge/br_if.c
@@ -79,7 +79,6 @@ static void destroy_nbp(struct net_bridg
{
struct net_device *dev = p->dev;
- dev->br_port = NULL;
p->br = NULL;
p->dev = NULL;
dev_put(dev);
@@ -100,6 +99,7 @@ static void del_nbp(struct net_bridge_po
struct net_bridge *br = p->br;
struct net_device *dev = p->dev;
+ dev->br_port = NULL;
dev_set_promiscuity(dev, -1);
spin_lock_bh(&br->lock);