]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - net/bridge/br_notify.c
MMC: OMAP: Power functions modified to MMC multislot support
[linux-2.6-omap-h63xx.git] / net / bridge / br_notify.c
index 37357ed2149b53056b192930335077ae6510ae25..07ac3ae68d8ff089000a78c19024a5d40c3baf9a 100644 (file)
@@ -15,6 +15,7 @@
 
 #include <linux/kernel.h>
 #include <linux/rtnetlink.h>
+#include <net/net_namespace.h>
 
 #include "br_private.h"
 
@@ -36,6 +37,9 @@ static int br_device_event(struct notifier_block *unused, unsigned long event, v
        struct net_bridge_port *p = dev->br_port;
        struct net_bridge *br;
 
+       if (dev->nd_net != &init_net)
+               return NOTIFY_DONE;
+
        /* not a port of a bridge */
        if (p == NULL)
                return NOTIFY_DONE;
@@ -50,7 +54,6 @@ static int br_device_event(struct notifier_block *unused, unsigned long event, v
        case NETDEV_CHANGEADDR:
                spin_lock_bh(&br->lock);
                br_fdb_changeaddr(p, dev->dev_addr);
-               br_ifinfo_notify(RTM_NEWLINK, p);
                br_stp_recalculate_bridge_id(br);
                spin_unlock_bh(&br->lock);
                break;
@@ -74,10 +77,11 @@ static int br_device_event(struct notifier_block *unused, unsigned long event, v
                break;
 
        case NETDEV_UP:
-               spin_lock_bh(&br->lock);
-               if (netif_carrier_ok(dev) && (br->dev->flags & IFF_UP))
+               if (netif_carrier_ok(dev) && (br->dev->flags & IFF_UP)) {
+                       spin_lock_bh(&br->lock);
                        br_stp_enable_port(p);
-               spin_unlock_bh(&br->lock);
+                       spin_unlock_bh(&br->lock);
+               }
                break;
 
        case NETDEV_UNREGISTER:
@@ -85,5 +89,10 @@ static int br_device_event(struct notifier_block *unused, unsigned long event, v
                break;
        }
 
+       /* Events that may cause spanning tree to refresh */
+       if (event == NETDEV_CHANGEADDR || event == NETDEV_UP ||
+           event == NETDEV_CHANGE || event == NETDEV_DOWN)
+               br_ifinfo_notify(RTM_NEWLINK, p);
+
        return NOTIFY_DONE;
 }