aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/net/dsa/dsa2.c
diff options
context:
space:
mode:
authorVladimir Oltean <vladimir.oltean@nxp.com>2022-03-08 11:15:10 +0200
committerDavid S. Miller <davem@davemloft.net>2022-03-09 11:12:09 +0000
commit0832cd9f1f023226527e95002d537123061ddac4 (patch)
tree0eae4bf23e6c42e102004865a07f3982b8b2ae07 /net/dsa/dsa2.c
parentMerge branch 'ptrp-ocp-next' (diff)
downloadwireguard-linux-0832cd9f1f023226527e95002d537123061ddac4.tar.xz
wireguard-linux-0832cd9f1f023226527e95002d537123061ddac4.zip
net: dsa: warn if port lists aren't empty in dsa_port_teardown
There has been recent work towards matching each switchdev object addition with a corresponding deletion. Therefore, having elements in the fdbs, mdbs, vlans lists at the time of a shared (DSA, CPU) port's teardown is indicative of a bug somewhere else, and not something that is to be expected. We shouldn't try to silently paper over that. Instead, print a warning and a stack trace. This change is a prerequisite for moving the initialization/teardown of these lists. Make it clear that clearing the lists isn't needed. Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/dsa/dsa2.c')
-rw-r--r--net/dsa/dsa2.c19
1 files changed, 3 insertions, 16 deletions
diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c
index d5f21a770689..04065d3fb09f 100644
--- a/net/dsa/dsa2.c
+++ b/net/dsa/dsa2.c
@@ -568,9 +568,7 @@ static void dsa_port_teardown(struct dsa_port *dp)
{
struct devlink_port *dlp = &dp->devlink_port;
struct dsa_switch *ds = dp->ds;
- struct dsa_mac_addr *a, *tmp;
struct net_device *slave;
- struct dsa_vlan *v, *n;
if (!dp->setup)
return;
@@ -601,20 +599,9 @@ static void dsa_port_teardown(struct dsa_port *dp)
break;
}
- list_for_each_entry_safe(a, tmp, &dp->fdbs, list) {
- list_del(&a->list);
- kfree(a);
- }
-
- list_for_each_entry_safe(a, tmp, &dp->mdbs, list) {
- list_del(&a->list);
- kfree(a);
- }
-
- list_for_each_entry_safe(v, n, &dp->vlans, list) {
- list_del(&v->list);
- kfree(v);
- }
+ WARN_ON(!list_empty(&dp->fdbs));
+ WARN_ON(!list_empty(&dp->mdbs));
+ WARN_ON(!list_empty(&dp->vlans));
dp->setup = false;
}