| 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); |