From: Yu Watanabe Date: Tue, 24 Oct 2023 09:33:45 +0000 (+0900) Subject: network: also synchronously update manager state file X-Git-Tag: v255-rc1~149^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=bd7d902884babaef60a362a2a0bf96814993c01f;p=thirdparty%2Fsystemd.git network: also synchronously update manager state file --- diff --git a/src/network/networkd-link-bus.c b/src/network/networkd-link-bus.c index af36b645f94..58d487570a7 100644 --- a/src/network/networkd-link-bus.c +++ b/src/network/networkd-link-bus.c @@ -111,8 +111,7 @@ int bus_link_method_set_ntp_servers(sd_bus_message *message, void *userdata, sd_ strv_free_and_replace(l->ntp, ntp); - link_dirty(l); - r = link_save_and_clean(l); + r = link_save_and_clean_full(l, /* also_save_manager = */ true); if (r < 0) return r; @@ -153,8 +152,7 @@ static int bus_link_method_set_dns_servers_internal(sd_bus_message *message, voi free_and_replace(l->dns, dns); l->n_dns = n; - link_dirty(l); - r = link_save_and_clean(l); + r = link_save_and_clean_full(l, /* also_save_manager = */ true); if (r < 0) return r; @@ -247,8 +245,7 @@ int bus_link_method_set_domains(sd_bus_message *message, void *userdata, sd_bus_ l->search_domains = TAKE_PTR(search_domains); l->route_domains = TAKE_PTR(route_domains); - link_dirty(l); - r = link_save_and_clean(l); + r = link_save_and_clean_full(l, /* also_save_manager = */ true); if (r < 0) return r; @@ -281,8 +278,7 @@ int bus_link_method_set_default_route(sd_bus_message *message, void *userdata, s if (l->dns_default_route != b) { l->dns_default_route = b; - link_dirty(l); - r = link_save_and_clean(l); + r = link_save_and_clean_full(l, /* also_save_manager = */ true); if (r < 0) return r; } @@ -326,8 +322,7 @@ int bus_link_method_set_llmnr(sd_bus_message *message, void *userdata, sd_bus_er if (l->llmnr != mode) { l->llmnr = mode; - link_dirty(l); - r = link_save_and_clean(l); + r = link_save_and_clean_full(l, /* also_save_manager = */ true); if (r < 0) return r; } @@ -371,8 +366,7 @@ int bus_link_method_set_mdns(sd_bus_message *message, void *userdata, sd_bus_err if (l->mdns != mode) { l->mdns = mode; - link_dirty(l); - r = link_save_and_clean(l); + r = link_save_and_clean_full(l, /* also_save_manager = */ true); if (r < 0) return r; } @@ -416,8 +410,7 @@ int bus_link_method_set_dns_over_tls(sd_bus_message *message, void *userdata, sd if (l->dns_over_tls_mode != mode) { l->dns_over_tls_mode = mode; - link_dirty(l); - r = link_save_and_clean(l); + r = link_save_and_clean_full(l, /* also_save_manager = */ true); if (r < 0) return r; } @@ -461,8 +454,7 @@ int bus_link_method_set_dnssec(sd_bus_message *message, void *userdata, sd_bus_e if (l->dnssec_mode != mode) { l->dnssec_mode = mode; - link_dirty(l); - r = link_save_and_clean(l); + r = link_save_and_clean_full(l, /* also_save_manager = */ true); if (r < 0) return r; } @@ -516,8 +508,7 @@ int bus_link_method_set_dnssec_negative_trust_anchors(sd_bus_message *message, v set_free_free(l->dnssec_negative_trust_anchors); l->dnssec_negative_trust_anchors = TAKE_PTR(ns); - link_dirty(l); - r = link_save_and_clean(l); + r = link_save_and_clean_full(l, /* also_save_manager = */ true); if (r < 0) return r; @@ -545,8 +536,7 @@ int bus_link_method_revert_ntp(sd_bus_message *message, void *userdata, sd_bus_e link_ntp_settings_clear(l); - link_dirty(l); - r = link_save_and_clean(l); + r = link_save_and_clean_full(l, /* also_save_manager = */ true); if (r < 0) return r; @@ -574,8 +564,7 @@ int bus_link_method_revert_dns(sd_bus_message *message, void *userdata, sd_bus_e link_dns_settings_clear(l); - link_dirty(l); - r = link_save_and_clean(l); + r = link_save_and_clean_full(l, /* also_save_manager = */ true); if (r < 0) return r; @@ -654,7 +643,7 @@ int bus_link_method_reconfigure(sd_bus_message *message, void *userdata, sd_bus_ return r; if (r > 0) { link_set_state(l, LINK_STATE_INITIALIZED); - r = link_save_and_clean(l); + r = link_save_and_clean_full(l, /* also_save_manager = */ true); if (r < 0) return r; } diff --git a/src/network/networkd-state-file.c b/src/network/networkd-state-file.c index 7309525e44e..3a95ba8d8bf 100644 --- a/src/network/networkd-state-file.c +++ b/src/network/networkd-state-file.c @@ -845,13 +845,19 @@ void link_clean(Link *link) { link_unref(set_remove(link->manager->dirty_links, link)); } -int link_save_and_clean(Link *link) { - int r; +int link_save_and_clean_full(Link *link, bool also_save_manager) { + int r, k = 0; + + assert(link); + assert(link->manager); + + if (also_save_manager) + k = manager_save(link->manager); r = link_save(link); if (r < 0) return r; link_clean(link); - return 0; + return k; } diff --git a/src/network/networkd-state-file.h b/src/network/networkd-state-file.h index 80e11fa1029..684f0d154ed 100644 --- a/src/network/networkd-state-file.h +++ b/src/network/networkd-state-file.h @@ -6,6 +6,9 @@ typedef struct Manager Manager; void link_dirty(Link *link); void link_clean(Link *link); -int link_save_and_clean(Link *link); +int link_save_and_clean_full(Link *link, bool also_save_manager); +static inline int link_save_and_clean(Link *link) { + return link_save_and_clean_full(link, false); +} int manager_save(Manager *m);