Skip to content

Commit

Permalink
mlxsw: spectrum: Don't assume upper device's type
Browse files Browse the repository at this point in the history
When an upper device is configured on top of a vPort we make sure it's a
bridge master during PRECHANGEUPPER and fail otherwise. Therefore, when
CHANGEUPPER is later received we don't bother checking the upper's type.

Make the code more extendable in preparation for VRF uppers, by checking
the upper's type.

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>
  • Loading branch information
Ido Schimmel authored and David S. Miller committed Mar 10, 2017
1 parent b414970 commit 1f88061
Showing 1 changed file with 11 additions and 8 deletions.
19 changes: 11 additions & 8 deletions drivers/net/ethernet/mellanox/mlxsw/spectrum.c
Original file line number Diff line number Diff line change
Expand Up @@ -4818,6 +4818,8 @@ static int mlxsw_sp_netdevice_vport_event(struct net_device *dev,
int err = 0;

mlxsw_sp_vport = mlxsw_sp_port_vport_find(mlxsw_sp_port, vid);
if (!mlxsw_sp_vport)
return 0;

switch (event) {
case NETDEV_PRECHANGEUPPER:
Expand All @@ -4835,16 +4837,17 @@ static int mlxsw_sp_netdevice_vport_event(struct net_device *dev,
break;
case NETDEV_CHANGEUPPER:
upper_dev = info->upper_dev;
if (info->linking) {
if (WARN_ON(!mlxsw_sp_vport))
return -EINVAL;
err = mlxsw_sp_vport_bridge_join(mlxsw_sp_vport,
upper_dev);
if (netif_is_bridge_master(upper_dev)) {
if (info->linking)
err = mlxsw_sp_vport_bridge_join(mlxsw_sp_vport,
upper_dev);
else
mlxsw_sp_vport_bridge_leave(mlxsw_sp_vport);
} else {
if (!mlxsw_sp_vport)
return 0;
mlxsw_sp_vport_bridge_leave(mlxsw_sp_vport);
err = -EINVAL;
WARN_ON(1);
}
break;
}

return err;
Expand Down

0 comments on commit 1f88061

Please sign in to comment.