]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: also synchronously update manager state file
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 24 Oct 2023 09:33:45 +0000 (18:33 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 24 Oct 2023 09:39:47 +0000 (18:39 +0900)
src/network/networkd-link-bus.c
src/network/networkd-state-file.c
src/network/networkd-state-file.h

index af36b645f9481376e02b27876384cf3a5366b1d1..58d487570a7c13609f44e3c9ffa59932ef61274b 100644 (file)
@@ -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;
         }
index 7309525e44e2d7a8d088a81dbf20f2baacf5e9e1..3a95ba8d8bf8d9f785cbf11b1fd0e500028ace8b 100644 (file)
@@ -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;
 }
index 80e11fa10296a3ca19fb997743650f583c54428e..684f0d154edfa3cdfa98e971b470af1ef81eebae 100644 (file)
@@ -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);