--- /dev/null
+diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c
+index d87fe35..a0f8c69 100644
+--- a/net/bridge/br_if.c
++++ b/net/bridge/br_if.c
+@@ -70,13 +70,14 @@ void br_port_carrier_check(struct net_bridge_port *p)
+ {
+ struct net_device *dev = p->dev;
+ struct net_bridge *br = p->br;
++ int carrier_ok = netif_carrier_ok(dev);
+
+- if (netif_carrier_ok(dev))
++ if (carrier_ok)
+ p->path_cost = port_cost(dev);
+
+ if (netif_running(br->dev)) {
+ spin_lock_bh(&br->lock);
+- if (netif_carrier_ok(dev)) {
++ if (carrier_ok) {
+ if (p->state == BR_STATE_DISABLED)
+ br_stp_enable_port(p);
+ } else {
+@@ -85,6 +86,18 @@ void br_port_carrier_check(struct net_bridge_port *p)
+ }
+ spin_unlock_bh(&br->lock);
+ }
++ if (p->priority == 0) {
++ if (netif_carrier_ok(br->dev) != carrier_ok) {
++ printk("prio 0 port %s carrier %s, update bridge %s state\n",
++ p->dev->name, carrier_ok?"on":"off",
++ br->dev->name);
++ if (carrier_ok) {
++ netif_carrier_on(br->dev);
++ } else {
++ netif_carrier_off(br->dev);
++ }
++ }
++ }
+ }
+
+ static void release_nbp(struct kobject *kobj)
+diff --git a/net/bridge/br_stp_if.c b/net/bridge/br_stp_if.c
+index 9a52ac5..2416561 100644
+--- a/net/bridge/br_stp_if.c
++++ b/net/bridge/br_stp_if.c
+@@ -258,6 +258,7 @@ void br_stp_set_bridge_priority(struct net_bridge *br, u16 newprio)
+ void br_stp_set_port_priority(struct net_bridge_port *p, u8 newprio)
+ {
+ port_id new_port_id = br_make_port_id(newprio, p->port_no);
++ int carrier;
+
+ if (br_is_designated_port(p))
+ p->designated_port = new_port_id;
+@@ -269,6 +270,18 @@ void br_stp_set_port_priority(struct net_bridge_port *p, u8 newprio)
+ br_become_designated_port(p);
+ br_port_state_selection(p->br);
+ }
++ if (newprio == 0) {
++ carrier = netif_carrier_ok(p->dev);
++ if (carrier != netif_carrier_ok(p->br->dev)) {
++ printk("prio 0 port %s carrier %s, update bridge %s state\n",
++ p->dev->name, carrier?"on":"off",
++ p->br->dev->name);
++ if (carrier)
++ netif_carrier_on(p->br->dev);
++ else
++ netif_carrier_off(p->br->dev);
++ }
++ }
+ }
+
+ /* called under bridge lock */