From: Vladimir Oltean <vladimir.olt...@nxp.com>

commit 8fd54a73b7cda11548154451bdb4bde6d8ff74c7 upstream.

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.olt...@nxp.com>
Reviewed-by: Andrew Lunn <and...@lunn.ch>
Reviewed-by: Florian Fainelli <f.faine...@gmail.com>
Link: https://lore.kernel.org/r/20210204163351.2929670-1-vladimir.olt...@nxp.com
Signed-off-by: Jakub Kicinski <k...@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gre...@linuxfoundation.org>
---
 net/dsa/dsa2.c |    7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

--- a/net/dsa/dsa2.c
+++ b/net/dsa/dsa2.c
@@ -399,18 +399,21 @@ static int dsa_switch_setup(struct dsa_s
                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;
        }
 
        return 0;
 
+teardown:
+       if (ds->ops->teardown)
+               ds->ops->teardown(ds);
 unregister_notifier:
        dsa_switch_unregister_notifier(ds);
 unregister_devlink:


Reply via email to