VLAN entries on a port can be associated with either a bridge VLAN or a
router port. Before the VLAN entry is destroyed these associations need
to be cleaned up.

Currently, this is always invoked from the function which destroys the
VLAN entry, but next patch is going to skip the destruction of the
default entry when a port in unlinked from a LAG.

The above does not mean that the associations should not be cleaned up,
so add a helper that will be invoked from both call sites.

Signed-off-by: Ido Schimmel <ido...@mellanox.com>
Reviewed-by: Petr Machata <pe...@mellanox.com>
---
 drivers/net/ethernet/mellanox/mlxsw/spectrum.c | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c 
b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
index 7d79827f6e04..7669152c5971 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
@@ -1149,6 +1149,15 @@ static void mlxsw_sp_port_vlan_flush(struct 
mlxsw_sp_port *mlxsw_sp_port,
        }
 }
 
+static void
+mlxsw_sp_port_vlan_cleanup(struct mlxsw_sp_port_vlan *mlxsw_sp_port_vlan)
+{
+       if (mlxsw_sp_port_vlan->bridge_port)
+               mlxsw_sp_port_vlan_bridge_leave(mlxsw_sp_port_vlan);
+       else if (mlxsw_sp_port_vlan->fid)
+               mlxsw_sp_port_vlan_router_leave(mlxsw_sp_port_vlan);
+}
+
 struct mlxsw_sp_port_vlan *
 mlxsw_sp_port_vlan_create(struct mlxsw_sp_port *mlxsw_sp_port, u16 vid)
 {
@@ -1186,11 +1195,7 @@ void mlxsw_sp_port_vlan_destroy(struct 
mlxsw_sp_port_vlan *mlxsw_sp_port_vlan)
        struct mlxsw_sp_port *mlxsw_sp_port = mlxsw_sp_port_vlan->mlxsw_sp_port;
        u16 vid = mlxsw_sp_port_vlan->vid;
 
-       if (mlxsw_sp_port_vlan->bridge_port)
-               mlxsw_sp_port_vlan_bridge_leave(mlxsw_sp_port_vlan);
-       else if (mlxsw_sp_port_vlan->fid)
-               mlxsw_sp_port_vlan_router_leave(mlxsw_sp_port_vlan);
-
+       mlxsw_sp_port_vlan_cleanup(mlxsw_sp_port_vlan);
        list_del(&mlxsw_sp_port_vlan->list);
        kfree(mlxsw_sp_port_vlan);
        mlxsw_sp_port_vlan_set(mlxsw_sp_port, vid, vid, false, false);
-- 
2.20.0

Reply via email to