bridge: avoid ethtool on non running interface
authorstephen hemminger <shemminger@vyatta.com>
Tue, 24 Aug 2010 13:12:56 +0000 (13:12 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 25 Aug 2010 23:36:51 +0000 (16:36 -0700)
If bridge port is offline, don't call ethtool to query speed.

Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
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)