|
@@ -243,12 +243,13 @@ bool br_stp_recalculate_bridge_id(struct net_bridge *br)
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
|
|
-/* called under bridge lock */
|
|
|
|
|
|
+/* Acquires and releases bridge lock */
|
|
void br_stp_set_bridge_priority(struct net_bridge *br, u16 newprio)
|
|
void br_stp_set_bridge_priority(struct net_bridge *br, u16 newprio)
|
|
{
|
|
{
|
|
struct net_bridge_port *p;
|
|
struct net_bridge_port *p;
|
|
int wasroot;
|
|
int wasroot;
|
|
|
|
|
|
|
|
+ spin_lock_bh(&br->lock);
|
|
wasroot = br_is_root_bridge(br);
|
|
wasroot = br_is_root_bridge(br);
|
|
|
|
|
|
list_for_each_entry(p, &br->port_list, list) {
|
|
list_for_each_entry(p, &br->port_list, list) {
|
|
@@ -266,6 +267,7 @@ void br_stp_set_bridge_priority(struct net_bridge *br, u16 newprio)
|
|
br_port_state_selection(br);
|
|
br_port_state_selection(br);
|
|
if (br_is_root_bridge(br) && !wasroot)
|
|
if (br_is_root_bridge(br) && !wasroot)
|
|
br_become_root_bridge(br);
|
|
br_become_root_bridge(br);
|
|
|
|
+ spin_unlock_bh(&br->lock);
|
|
}
|
|
}
|
|
|
|
|
|
/* called under bridge lock */
|
|
/* called under bridge lock */
|