mlxsw: spectrum: Split a helper out of mlxsw_sp_netdevice_event()
authorPetr Machata <petrm@nvidia.com>
Wed, 19 Jul 2023 11:01:21 +0000 (13:01 +0200)
committerDavid S. Miller <davem@davemloft.net>
Fri, 21 Jul 2023 07:54:04 +0000 (08:54 +0100)
Move the meat of mlxsw_sp_netdevice_event() to a separate function that
does just the validation. This separate helper will be possible to call
later for recursive ascent when validating attachment of a front panel port
to a bridge with uppers.

Signed-off-by: Petr Machata <petrm@nvidia.com>
Reviewed-by: Danielle Ratson <danieller@nvidia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlxsw/spectrum.c

index 86e2f0e..0488fe5 100644 (file)
@@ -5146,21 +5146,18 @@ static int mlxsw_sp_netdevice_vxlan_event(struct mlxsw_sp *mlxsw_sp,
        return 0;
 }
 
-static int mlxsw_sp_netdevice_event(struct notifier_block *nb,
-                                   unsigned long event, void *ptr)
+static int __mlxsw_sp_netdevice_event(struct mlxsw_sp *mlxsw_sp,
+                                     unsigned long event, void *ptr)
 {
        struct net_device *dev = netdev_notifier_info_to_dev(ptr);
        struct mlxsw_sp_span_entry *span_entry;
-       struct mlxsw_sp *mlxsw_sp;
        int err = 0;
 
-       mlxsw_sp = container_of(nb, struct mlxsw_sp, netdevice_nb);
        if (event == NETDEV_UNREGISTER) {
                span_entry = mlxsw_sp_span_entry_find_by_port(mlxsw_sp, dev);
                if (span_entry)
                        mlxsw_sp_span_entry_invalidate(mlxsw_sp, span_entry);
        }
-       mlxsw_sp_span_respin(mlxsw_sp);
 
        if (netif_is_vxlan(dev))
                err = mlxsw_sp_netdevice_vxlan_event(mlxsw_sp, dev, event, ptr);
@@ -5175,6 +5172,19 @@ static int mlxsw_sp_netdevice_event(struct notifier_block *nb,
        else if (netif_is_macvlan(dev))
                err = mlxsw_sp_netdevice_macvlan_event(dev, event, ptr);
 
+       return err;
+}
+
+static int mlxsw_sp_netdevice_event(struct notifier_block *nb,
+                                   unsigned long event, void *ptr)
+{
+       struct mlxsw_sp *mlxsw_sp;
+       int err;
+
+       mlxsw_sp = container_of(nb, struct mlxsw_sp, netdevice_nb);
+       mlxsw_sp_span_respin(mlxsw_sp);
+       err = __mlxsw_sp_netdevice_event(mlxsw_sp, event, ptr);
+
        return notifier_from_errno(err);
 }