OSDN Git Service

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 d74b254..61848db 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);