diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index fae750be20..97c6d21c07 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -3215,15 +3215,18 @@ int link_update(Link *link, sd_netlink_message *m) { if (r >= 0 && !streq(ifname, link->ifname)) { log_link_info(link, "Interface name change detected, %s has been renamed to %s.", link->ifname, ifname); - link_free_carrier_maps(link); + if (link->state == LINK_STATE_PENDING) { + r = free_and_strdup(&link->ifname, ifname); + if (r < 0) + return r; + } else { + Manager *manager = link->manager; - r = free_and_strdup(&link->ifname, ifname); - if (r < 0) - return r; - - r = link_new_carrier_maps(link); - if (r < 0) - return r; + link_drop(link); + r = link_add(manager, m, &link); + if (r < 0) + return r; + } } r = sd_netlink_message_read_u32(m, IFLA_MTU, &mtu);