From 8ae7b8a1e1d6f4a5285ac6ef1d52d57046f23824 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Mon, 20 Jan 2020 20:38:21 +0900 Subject: [PATCH 1/3] network: set dirty flag when link is being reconfigured --- src/network/networkd-link.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 07c6cf34510..85d0c92b96d 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -3089,6 +3089,7 @@ static int link_reconfigure_internal(Link *link, sd_netlink_message *m, bool for return r; link_set_state(link, LINK_STATE_INITIALIZED); + link_dirty(link); /* link_configure_duid() returns 0 if it requests product UUID. In that case, * link_configure() is called later asynchronously. */ From 0ce0e3470eb51242ac0bcb72f59b02d45660df16 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Wed, 22 Jan 2020 16:05:27 +0900 Subject: [PATCH 2/3] network: synchronously save state file when link is being reconfigured --- src/network/networkd-link-bus.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/network/networkd-link-bus.c b/src/network/networkd-link-bus.c index 8f3b2e92f8f..68889d858d9 100644 --- a/src/network/networkd-link-bus.c +++ b/src/network/networkd-link-bus.c @@ -620,6 +620,12 @@ int bus_link_method_reconfigure(sd_bus_message *message, void *userdata, sd_bus_ if (r < 0) return r; + link_set_state(l, LINK_STATE_INITIALIZED); + r = link_save(l); + if (r < 0) + return r; + link_clean(l); + return sd_bus_reply_method_return(message, NULL); } From 2c0d7ed393934078f8f05db3aef9abeb3a3c51e7 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Wed, 22 Jan 2020 16:06:50 +0900 Subject: [PATCH 3/3] network: do nothing if link is in pending or linger state on reconfiguring --- src/network/networkd-link.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 85d0c92b96d..f3744e2354c 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -3023,9 +3023,6 @@ static int link_reconfigure_internal(Link *link, sd_netlink_message *m, bool for Network *network; int r; - if (IN_SET(link->state, LINK_STATE_PENDING, LINK_STATE_LINGER)) - return 0; - if (m) { _cleanup_strv_free_ char **s = NULL; @@ -3128,6 +3125,9 @@ int link_reconfigure(Link *link, bool force) { _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL; int r; + if (IN_SET(link->state, LINK_STATE_PENDING, LINK_STATE_LINGER)) + return 0; + r = sd_rtnl_message_new_link(link->manager->rtnl, &req, RTM_GETLINK, link->ifindex); if (r < 0)