- if (br->dev->flags & IFF_UP)
- br_stp_recalculate_bridge_id(br);
- spin_unlock_bh(&br->lock);
+ br_stp_recalculate_bridge_id(br);
+ break;
+
+ case NETDEV_CHANGE: /* device is up but carrier changed */
+ if (!(br->dev->flags & IFF_UP))
+ break;
+
+ 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);
+ }