mlxsw: spectrum_router: Destroy RIF only based on its struct
Now that all the information to create a RIF is contained within the RIF struct itself, we can also simplify the destruction logic. Signed-off-by: Ido Schimmel <idosch@mellanox.com> Signed-off-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ab01ae9169
commit
1b8f09a05f
@ -3091,11 +3091,9 @@ err_vr_get:
|
||||
}
|
||||
|
||||
static void
|
||||
mlxsw_sp_port_vlan_rif_sp_destroy(struct mlxsw_sp_port_vlan *mlxsw_sp_port_vlan,
|
||||
mlxsw_sp_port_vlan_rif_sp_destroy(struct mlxsw_sp *mlxsw_sp,
|
||||
struct mlxsw_sp_rif *rif)
|
||||
{
|
||||
struct mlxsw_sp_port *mlxsw_sp_port = mlxsw_sp_port_vlan->mlxsw_sp_port;
|
||||
struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp;
|
||||
struct mlxsw_sp_vr *vr = &mlxsw_sp->router->vrs[rif->vr_id];
|
||||
struct net_device *l3_dev = rif->dev;
|
||||
struct mlxsw_sp_fid *f = rif->f;
|
||||
@ -3124,11 +3122,12 @@ mlxsw_sp_port_vlan_rif_sp_join(struct mlxsw_sp_port_vlan *mlxsw_sp_port_vlan,
|
||||
struct net_device *l3_dev)
|
||||
{
|
||||
struct mlxsw_sp_port *mlxsw_sp_port = mlxsw_sp_port_vlan->mlxsw_sp_port;
|
||||
struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp;
|
||||
u16 vid = mlxsw_sp_port_vlan->vid;
|
||||
struct mlxsw_sp_rif *rif;
|
||||
int err;
|
||||
|
||||
rif = mlxsw_sp_rif_find_by_dev(mlxsw_sp_port->mlxsw_sp, l3_dev);
|
||||
rif = mlxsw_sp_rif_find_by_dev(mlxsw_sp, l3_dev);
|
||||
if (!rif) {
|
||||
rif = mlxsw_sp_port_vlan_rif_sp_create(mlxsw_sp_port_vlan,
|
||||
l3_dev);
|
||||
@ -3163,7 +3162,7 @@ err_port_vid_stp_set:
|
||||
mlxsw_sp_port_vid_learning_set(mlxsw_sp_port, vid, true);
|
||||
err_port_vid_learning_set:
|
||||
if (rif->f->ref_count == 0)
|
||||
mlxsw_sp_port_vlan_rif_sp_destroy(mlxsw_sp_port_vlan, rif);
|
||||
mlxsw_sp_port_vlan_rif_sp_destroy(mlxsw_sp, rif);
|
||||
return err;
|
||||
}
|
||||
|
||||
@ -3171,6 +3170,7 @@ static void
|
||||
mlxsw_sp_port_vlan_rif_sp_leave(struct mlxsw_sp_port_vlan *mlxsw_sp_port_vlan)
|
||||
{
|
||||
struct mlxsw_sp_port *mlxsw_sp_port = mlxsw_sp_port_vlan->mlxsw_sp_port;
|
||||
struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp;
|
||||
struct mlxsw_sp_fid *fid = mlxsw_sp_port_vlan->fid;
|
||||
u16 vid = mlxsw_sp_port_vlan->vid;
|
||||
|
||||
@ -3184,7 +3184,7 @@ mlxsw_sp_port_vlan_rif_sp_leave(struct mlxsw_sp_port_vlan *mlxsw_sp_port_vlan)
|
||||
mlxsw_sp_port_vid_learning_set(mlxsw_sp_port, vid, true);
|
||||
|
||||
if (fid->ref_count == 0)
|
||||
mlxsw_sp_port_vlan_rif_sp_destroy(mlxsw_sp_port_vlan, fid->rif);
|
||||
mlxsw_sp_port_vlan_rif_sp_destroy(mlxsw_sp, fid->rif);
|
||||
}
|
||||
|
||||
static int mlxsw_sp_inetaddr_port_vlan_event(struct net_device *l3_dev,
|
||||
|
Loading…
Reference in New Issue
Block a user