]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Add bridge fix from Steve Hemminger
authorChris Wright <chrisw@osdl.org>
Wed, 12 Oct 2005 23:14:46 +0000 (16:14 -0700)
committerChris Wright <chrisw@osdl.org>
Wed, 12 Oct 2005 23:14:46 +0000 (16:14 -0700)
queue/br-fix-race-on-bridge-del-if.patch [new file with mode: 0644]
queue/series

diff --git a/queue/br-fix-race-on-bridge-del-if.patch b/queue/br-fix-race-on-bridge-del-if.patch
new file mode 100644 (file)
index 0000000..559bde9
--- /dev/null
@@ -0,0 +1,42 @@
+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>
+---
+ net/bridge/br_if.c |    2 +-
+ 1 files changed, 1 insertion(+), 1 deletion(-)
+
+Index: linux-2.6.13.y/net/bridge/br_if.c
+===================================================================
+--- linux-2.6.13.y.orig/net/bridge/br_if.c
++++ linux-2.6.13.y/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);
index a7ffc94948040db53cc68aba36d2b374b7e9635a..79f17108d92b76419f3105e8f4871514add946a6 100644 (file)
@@ -1 +1,2 @@
 sparc64-build-fix.patch
+br-fix-race-on-bridge-del-if.patch