Skip to content

Commit 4ede74e

Browse files
vladimirolteandavem330
authored andcommitted
net: dsa: refactor the prechangeupper sanity checks into a dedicated 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 <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 7e8c185 commit 4ede74e

File tree

1 file changed

+29
-15
lines changed

1 file changed

+29
-15
lines changed

net/dsa/slave.c

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2166,6 +2166,32 @@ dsa_slave_check_8021q_upper(struct net_device *dev,
21662166
return NOTIFY_DONE;
21672167
}
21682168

2169+
static int
2170+
dsa_slave_prechangeupper_sanity_check(struct net_device *dev,
2171+
struct netdev_notifier_changeupper_info *info)
2172+
{
2173+
struct dsa_switch *ds;
2174+
struct dsa_port *dp;
2175+
int err;
2176+
2177+
if (!dsa_slave_dev_check(dev))
2178+
return dsa_prevent_bridging_8021q_upper(dev, info);
2179+
2180+
dp = dsa_slave_to_port(dev);
2181+
ds = dp->ds;
2182+
2183+
if (ds->ops->port_prechangeupper) {
2184+
err = ds->ops->port_prechangeupper(ds, dp->index, info);
2185+
if (err)
2186+
return notifier_from_errno(err);
2187+
}
2188+
2189+
if (is_vlan_dev(info->upper_dev))
2190+
return dsa_slave_check_8021q_upper(dev, info);
2191+
2192+
return NOTIFY_DONE;
2193+
}
2194+
21692195
static int dsa_slave_netdevice_event(struct notifier_block *nb,
21702196
unsigned long event, void *ptr)
21712197
{
@@ -2174,24 +2200,12 @@ static int dsa_slave_netdevice_event(struct notifier_block *nb,
21742200
switch (event) {
21752201
case NETDEV_PRECHANGEUPPER: {
21762202
struct netdev_notifier_changeupper_info *info = ptr;
2177-
struct dsa_switch *ds;
2178-
struct dsa_port *dp;
21792203
int err;
21802204

2181-
if (!dsa_slave_dev_check(dev))
2182-
return dsa_prevent_bridging_8021q_upper(dev, ptr);
2183-
2184-
dp = dsa_slave_to_port(dev);
2185-
ds = dp->ds;
2186-
2187-
if (ds->ops->port_prechangeupper) {
2188-
err = ds->ops->port_prechangeupper(ds, dp->index, info);
2189-
if (err)
2190-
return notifier_from_errno(err);
2191-
}
2205+
err = dsa_slave_prechangeupper_sanity_check(dev, info);
2206+
if (err != NOTIFY_DONE)
2207+
return err;
21922208

2193-
if (is_vlan_dev(info->upper_dev))
2194-
return dsa_slave_check_8021q_upper(dev, ptr);
21952209
break;
21962210
}
21972211
case NETDEV_CHANGEUPPER:

0 commit comments

Comments
 (0)