Skip to content

Commit

Permalink
net: dsa: refactor the prechangeupper sanity checks into a dedicated …
Browse files Browse the repository at this point in the history
…function

We need to add more logic to the DSA NETDEV_PRECHANGEUPPER event
handler, more exactly we need to request an unsync of switchdev objects.
In order to fit more code, refactor the existing logic into a helper.

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Vladimir Oltean authored and David S. Miller committed Jun 28, 2021
1 parent 7e8c185 commit 4ede74e
Showing 1 changed file with 29 additions and 15 deletions.
44 changes: 29 additions & 15 deletions net/dsa/slave.c
Original file line number Diff line number Diff line change
Expand Up @@ -2166,6 +2166,32 @@ dsa_slave_check_8021q_upper(struct net_device *dev,
return NOTIFY_DONE;
}

static int
dsa_slave_prechangeupper_sanity_check(struct net_device *dev,
struct netdev_notifier_changeupper_info *info)
{
struct dsa_switch *ds;
struct dsa_port *dp;
int err;

if (!dsa_slave_dev_check(dev))
return dsa_prevent_bridging_8021q_upper(dev, info);

dp = dsa_slave_to_port(dev);
ds = dp->ds;

if (ds->ops->port_prechangeupper) {
err = ds->ops->port_prechangeupper(ds, dp->index, info);
if (err)
return notifier_from_errno(err);
}

if (is_vlan_dev(info->upper_dev))
return dsa_slave_check_8021q_upper(dev, info);

return NOTIFY_DONE;
}

static int dsa_slave_netdevice_event(struct notifier_block *nb,
unsigned long event, void *ptr)
{
Expand All @@ -2174,24 +2200,12 @@ static int dsa_slave_netdevice_event(struct notifier_block *nb,
switch (event) {
case NETDEV_PRECHANGEUPPER: {
struct netdev_notifier_changeupper_info *info = ptr;
struct dsa_switch *ds;
struct dsa_port *dp;
int err;

if (!dsa_slave_dev_check(dev))
return dsa_prevent_bridging_8021q_upper(dev, ptr);

dp = dsa_slave_to_port(dev);
ds = dp->ds;

if (ds->ops->port_prechangeupper) {
err = ds->ops->port_prechangeupper(ds, dp->index, info);
if (err)
return notifier_from_errno(err);
}
err = dsa_slave_prechangeupper_sanity_check(dev, info);
if (err != NOTIFY_DONE)
return err;

if (is_vlan_dev(info->upper_dev))
return dsa_slave_check_8021q_upper(dev, ptr);
break;
}
case NETDEV_CHANGEUPPER:
Expand Down

0 comments on commit 4ede74e

Please sign in to comment.