mlxsw: spectrum_switchdev: Break mid deletion into two function
authorNogah Frankel <nogahf@mellanox.com>
Wed, 20 Sep 2017 14:15:07 +0000 (16:15 +0200)
committerDavid S. Miller <davem@davemloft.net>
Thu, 21 Sep 2017 01:03:12 +0000 (18:03 -0700)
Break mid deletion into two function, so it will be possible in the future
to delete a mid entry for other reasons then switchdev command (like port
deletion).

Signed-off-by: Nogah Frankel <nogahf@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_switchdev.c

index 9dd05d8..7f622de 100644 (file)
@@ -1468,6 +1468,25 @@ static int mlxsw_sp_port_vlans_del(struct mlxsw_sp_port *mlxsw_sp_port,
        return 0;
 }
 
+static int
+__mlxsw_sp_port_mdb_del(struct mlxsw_sp_port *mlxsw_sp_port,
+                       struct mlxsw_sp_bridge_port *bridge_port,
+                       struct mlxsw_sp_mid *mid)
+{
+       struct net_device *dev = mlxsw_sp_port->dev;
+       int err;
+
+       err = mlxsw_sp_port_smid_set(mlxsw_sp_port, mid->mid, false);
+       if (err)
+               netdev_err(dev, "Unable to remove port from SMID\n");
+
+       err = mlxsw_sp_port_remove_from_mid(mlxsw_sp_port, mid);
+       if (err)
+               netdev_err(dev, "Unable to remove MC SFD\n");
+
+       return err;
+}
+
 static int mlxsw_sp_port_mdb_del(struct mlxsw_sp_port *mlxsw_sp_port,
                                 const struct switchdev_obj_port_mdb *mdb)
 {
@@ -1479,8 +1498,6 @@ static int mlxsw_sp_port_mdb_del(struct mlxsw_sp_port *mlxsw_sp_port,
        struct mlxsw_sp_bridge_port *bridge_port;
        struct mlxsw_sp_mid *mid;
        u16 fid_index;
-       u16 mid_idx;
-       int err = 0;
 
        bridge_port = mlxsw_sp_bridge_port_find(mlxsw_sp->bridge, orig_dev);
        if (!bridge_port)
@@ -1501,16 +1518,7 @@ static int mlxsw_sp_port_mdb_del(struct mlxsw_sp_port *mlxsw_sp_port,
                return -EINVAL;
        }
 
-       err = mlxsw_sp_port_smid_set(mlxsw_sp_port, mid->mid, false);
-       if (err)
-               netdev_err(dev, "Unable to remove port from SMID\n");
-
-       mid_idx = mid->mid;
-       err = mlxsw_sp_port_remove_from_mid(mlxsw_sp_port, mid);
-       if (err)
-               netdev_err(dev, "Unable to remove MC SFD\n");
-
-       return err;
+       return __mlxsw_sp_port_mdb_del(mlxsw_sp_port, bridge_port, mid);
 }
 
 static int mlxsw_sp_port_obj_del(struct net_device *dev,