]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
mlxsw: spectrum: Add an helper function to cleanup VLAN entries
authorIdo Schimmel <idosch@mellanox.com>
Thu, 20 Dec 2018 19:42:32 +0000 (19:42 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 20 Dec 2018 23:48:54 +0000 (15:48 -0800)
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 <idosch@mellanox.com>
Reviewed-by: Petr Machata <petrm@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlxsw/spectrum.c

index d74b254a6c52c8128c0e8d7cb6e90386dba0fc2d..61848db516c7b1160b6df8478f5ca1d952ac8115 100644 (file)
@@ -1154,6 +1154,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)
 {
@@ -1191,11 +1200,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);