diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c index d142eb2b288b3d9a28934b5a10f43ae5c363d961..3c3e56a1f34d1fbf45b8fdb8b133b3a7c72cef9a 100644 --- a/net/dsa/dsa2.c +++ b/net/dsa/dsa2.c @@ -795,8 +795,14 @@ static int dsa_tree_setup_switches(struct dsa_switch_tree *dst) list_for_each_entry(dp, &dst->ports, list) { err = dsa_port_setup(dp); - if (err) + if (err) { + dsa_port_devlink_teardown(dp); + dp->type = DSA_PORT_TYPE_UNUSED; + err = dsa_port_devlink_setup(dp); + if (err) + goto teardown; continue; + } } return 0;