mlxsw: spectrum_router: Destroy RIF only based on its struct
authorIdo Schimmel <idosch@mellanox.com>
Fri, 26 May 2017 06:37:36 +0000 (08:37 +0200)
committerDavid S. Miller <davem@davemloft.net>
Fri, 26 May 2017 19:18:48 +0000 (15:18 -0400)
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>
drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c

index 73cc5195068f025965bdfbecd17e658928d315e3..41c85dcfa99fc9fd707f76c2d8ca4a858d8c0c7e 100644 (file)
@@ -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,