net: dsa: call teardown method on probe failure
authorVladimir Oltean <vladimir.oltean@nxp.com>
Thu, 4 Feb 2021 16:33:51 +0000 (18:33 +0200)
committerJakub Kicinski <kuba@kernel.org>
Fri, 5 Feb 2021 04:22:00 +0000 (20:22 -0800)
Since teardown is supposed to undo the effects of the setup method, it
should be called in the error path for dsa_switch_setup, not just in
dsa_switch_teardown.

Fixes: 5e3f847a02aa ("net: dsa: Add teardown callback for drivers")
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Link: https://lore.kernel.org/r/20210204163351.2929670-1-vladimir.oltean@nxp.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/dsa/dsa2.c

index a47e0f9..a04fd63 100644 (file)
@@ -462,20 +462,23 @@ static int dsa_switch_setup(struct dsa_switch *ds)
                ds->slave_mii_bus = devm_mdiobus_alloc(ds->dev);
                if (!ds->slave_mii_bus) {
                        err = -ENOMEM;
-                       goto unregister_notifier;
+                       goto teardown;
                }
 
                dsa_slave_mii_bus_init(ds);
 
                err = mdiobus_register(ds->slave_mii_bus);
                if (err < 0)
-                       goto unregister_notifier;
+                       goto teardown;
        }
 
        ds->setup = true;
 
        return 0;
 
+teardown:
+       if (ds->ops->teardown)
+               ds->ops->teardown(ds);
 unregister_notifier:
        dsa_switch_unregister_notifier(ds);
 unregister_devlink_ports: