net: dsa: warn if port lists aren't empty in dsa_port_teardown
authorVladimir Oltean <vladimir.oltean@nxp.com>
Tue, 8 Mar 2022 09:15:10 +0000 (11:15 +0200)
committerDavid S. Miller <davem@davemloft.net>
Wed, 9 Mar 2022 11:12:09 +0000 (11:12 +0000)
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>
net/dsa/dsa2.c

index d5f21a7..04065d3 100644 (file)
@@ -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;
 }