bridge: vlan: move back vlan_flush
Ido Schimmel reported a problem with switchdev devices because of the order change of del_nbp operations, more specifically the move of nbp_vlan_flush() which deletes all vlans and frees vlgrp after the rx_handler has been unregistered. So in order to fix this move vlan_flush back where it was and make it destroy the rhtable after NULLing vlgrp and waiting a grace period to make sure noone can see it. Reported-by: Ido Schimmel <idosch@mellanox.com> Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com> Reviewed-by: Ido Schimmel <idosch@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
b8d02c3cac
commit
f409d0ed87
@@ -248,6 +248,7 @@ static void del_nbp(struct net_bridge_port *p)
|
||||
|
||||
list_del_rcu(&p->list);
|
||||
|
||||
nbp_vlan_flush(p);
|
||||
br_fdb_delete_by_port(br, p, 0, 1);
|
||||
nbp_update_port_count(br);
|
||||
|
||||
@@ -256,8 +257,6 @@ static void del_nbp(struct net_bridge_port *p)
|
||||
dev->priv_flags &= ~IFF_BRIDGE_PORT;
|
||||
|
||||
netdev_rx_handler_unregister(dev);
|
||||
/* use the synchronize_rcu done by netdev_rx_handler_unregister */
|
||||
nbp_vlan_flush(p);
|
||||
|
||||
br_multicast_del_port(p);
|
||||
|
||||
|
Reference in New Issue
Block a user