]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - net/bridge/br_if.c
bridge: avoid ethtool on non running interface
[net-next-2.6.git] / net / bridge / br_if.c
index 1707945465226ced1322d6cffadfb5d6d986b423..89ad25a76202924eadf9bce8aadf761dcea3e8d5 100644 (file)
@@ -67,20 +67,21 @@ void br_port_carrier_check(struct net_bridge_port *p)
        struct net_device *dev = p->dev;
        struct net_bridge *br = p->br;
 
-       if (netif_carrier_ok(dev))
+       if (netif_running(dev) && netif_carrier_ok(dev))
                p->path_cost = port_cost(dev);
 
-       if (netif_running(br->dev)) {
-               spin_lock_bh(&br->lock);
-               if (netif_carrier_ok(dev)) {
-                       if (p->state == BR_STATE_DISABLED)
-                               br_stp_enable_port(p);
-               } else {
-                       if (p->state != BR_STATE_DISABLED)
-                               br_stp_disable_port(p);
-               }
-               spin_unlock_bh(&br->lock);
+       if (!netif_running(br->dev))
+               return;
+
+       spin_lock_bh(&br->lock);
+       if (netif_running(dev) && netif_carrier_ok(dev)) {
+               if (p->state == BR_STATE_DISABLED)
+                       br_stp_enable_port(p);
+       } else {
+               if (p->state != BR_STATE_DISABLED)
+                       br_stp_disable_port(p);
        }
+       spin_unlock_bh(&br->lock);
 }
 
 static void release_nbp(struct kobject *kobj)