diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c index 1f70441cbada..7fb8014b8469 100644 --- a/net/bridge/br_if.c +++ b/net/bridge/br_if.c @@ -381,6 +381,9 @@ void br_dev_delete(struct net_device *dev, struct list_head *head) br_fdb_delete_by_port(br, NULL, 0, 1); + timer_shutdown_sync(&br->hello_timer); + timer_shutdown_sync(&br->topology_change_timer); + timer_shutdown_sync(&br->tcn_timer); cancel_delayed_work_sync(&br->gc_work); br_sysfs_delbr(br->dev); diff --git a/net/bridge/br_stp.c b/net/bridge/br_stp.c index 1d80f34a139c..9bfdef0b0451 100644 --- a/net/bridge/br_stp.c +++ b/net/bridge/br_stp.c @@ -365,7 +365,8 @@ void br_topology_change_detection(struct net_bridge *br) { int isroot = br_is_root_bridge(br); - if (br->stp_enabled != BR_KERNEL_STP) + if (br->stp_enabled != BR_KERNEL_STP || + !(br->dev->flags & IFF_UP)) return; br_info(br, "topology change detected, %s\n",