On 20/05/2020 16:09, Horatiu Vultur wrote: > When a MRP instance is deleted, then restore the port according to the > bridge state. If the bridge is up then the ports will be in forwarding > state otherwise will be in disabled state. > > Fixes: 9a9f26e8f7ea ("bridge: mrp: Connect MRP API with the switchdev API") > Signed-off-by: Horatiu Vultur <horatiu.vultur@xxxxxxxxxxxxx> > --- > net/bridge/br_mrp.c | 13 +++++++++---- > 1 file changed, 9 insertions(+), 4 deletions(-) > Acked-by: Nikolay Aleksandrov <nikolay@xxxxxxxxxxxxxxxxxxx> > diff --git a/net/bridge/br_mrp.c b/net/bridge/br_mrp.c > index a5a3fa59c078a..bdd8920c15053 100644 > --- a/net/bridge/br_mrp.c > +++ b/net/bridge/br_mrp.c > @@ -229,6 +229,7 @@ static void br_mrp_test_work_expired(struct work_struct *work) > static void br_mrp_del_impl(struct net_bridge *br, struct br_mrp *mrp) > { > struct net_bridge_port *p; > + u8 state; > > /* Stop sending MRP_Test frames */ > cancel_delayed_work_sync(&mrp->test_work); > @@ -240,20 +241,24 @@ static void br_mrp_del_impl(struct net_bridge *br, struct br_mrp *mrp) > p = rtnl_dereference(mrp->p_port); > if (p) { > spin_lock_bh(&br->lock); > - p->state = BR_STATE_FORWARDING; > + state = netif_running(br->dev) ? > + BR_STATE_FORWARDING : BR_STATE_DISABLED; > + p->state = state; > p->flags &= ~BR_MRP_AWARE; > spin_unlock_bh(&br->lock); > - br_mrp_port_switchdev_set_state(p, BR_STATE_FORWARDING); > + br_mrp_port_switchdev_set_state(p, state); > rcu_assign_pointer(mrp->p_port, NULL); > } > > p = rtnl_dereference(mrp->s_port); > if (p) { > spin_lock_bh(&br->lock); > - p->state = BR_STATE_FORWARDING; > + state = netif_running(br->dev) ? > + BR_STATE_FORWARDING : BR_STATE_DISABLED; > + p->state = state; > p->flags &= ~BR_MRP_AWARE; > spin_unlock_bh(&br->lock); > - br_mrp_port_switchdev_set_state(p, BR_STATE_FORWARDING); > + br_mrp_port_switchdev_set_state(p, state); > rcu_assign_pointer(mrp->s_port, NULL); > } > >