From 2e1113b7d0cea8e5145514d70aab033bed8f2abb Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Thu, 21 Dec 2023 03:46:03 +0900 Subject: [PATCH 1/2] network: split out manager_clean_all() from manager_dirty_handler() And rename manager_dirty_handler() to manager_post_handler(). No functional change, just refactoring. --- src/network/networkd-manager.c | 23 +++++------------------ src/network/networkd-state-file.c | 23 +++++++++++++++++++++++ src/network/networkd-state-file.h | 1 + 3 files changed, 29 insertions(+), 18 deletions(-) diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c index b162d21aa0..d812e8c0ee 100644 --- a/src/network/networkd-manager.c +++ b/src/network/networkd-manager.c @@ -429,24 +429,11 @@ static int manager_connect_rtnl(Manager *m, int fd) { return manager_setup_rtnl_filter(m); } -static int manager_dirty_handler(sd_event_source *s, void *userdata) { - Manager *m = ASSERT_PTR(userdata); - Link *link; - int r; +static int manager_post_handler(sd_event_source *s, void *userdata) { + Manager *manager = ASSERT_PTR(userdata); - if (m->dirty) { - r = manager_save(m); - if (r < 0) - log_warning_errno(r, "Failed to update state file %s, ignoring: %m", m->state_file); - } - - SET_FOREACH(link, m->dirty_links) { - r = link_save_and_clean(link); - if (r < 0) - log_link_warning_errno(link, r, "Failed to update link state file %s, ignoring: %m", link->state_file); - } - - return 1; + (void) manager_clean_all(manager); + return 0; } static int signal_terminate_callback(sd_event_source *s, const struct signalfd_siginfo *si, void *userdata) { @@ -522,7 +509,7 @@ int manager_setup(Manager *m) { if (r < 0) log_debug_errno(r, "Failed allocate memory pressure event source, ignoring: %m"); - r = sd_event_add_post(m->event, NULL, manager_dirty_handler, m); + r = sd_event_add_post(m->event, NULL, manager_post_handler, m); if (r < 0) return r; diff --git a/src/network/networkd-state-file.c b/src/network/networkd-state-file.c index 3a95ba8d8b..9f0e365c22 100644 --- a/src/network/networkd-state-file.c +++ b/src/network/networkd-state-file.c @@ -861,3 +861,26 @@ int link_save_and_clean_full(Link *link, bool also_save_manager) { link_clean(link); return k; } + +int manager_clean_all(Manager *manager) { + int r, ret = 0; + + assert(manager); + + if (manager->dirty) { + r = manager_save(manager); + if (r < 0) + log_warning_errno(r, "Failed to update state file %s, ignoring: %m", manager->state_file); + RET_GATHER(ret, r); + } + + Link *link; + SET_FOREACH(link, manager->dirty_links) { + r = link_save_and_clean(link); + if (r < 0) + log_link_warning_errno(link, r, "Failed to update link state file %s, ignoring: %m", link->state_file); + RET_GATHER(ret, r); + } + + return ret; +} diff --git a/src/network/networkd-state-file.h b/src/network/networkd-state-file.h index 684f0d154e..7efd1578da 100644 --- a/src/network/networkd-state-file.h +++ b/src/network/networkd-state-file.h @@ -12,3 +12,4 @@ static inline int link_save_and_clean(Link *link) { } int manager_save(Manager *m); +int manager_clean_all(Manager *manager); From e36d8e4858ba33ae0fdeef398f22cf8980b5149f Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Thu, 21 Dec 2023 03:46:10 +0900 Subject: [PATCH 2/2] network: merge two post event sources No functional change, just refactoring. --- src/network/networkd-manager.c | 5 +---- src/network/networkd-queue.c | 5 +++-- src/network/networkd-queue.h | 3 +-- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c index d812e8c0ee..51f8b0cc74 100644 --- a/src/network/networkd-manager.c +++ b/src/network/networkd-manager.c @@ -432,6 +432,7 @@ static int manager_connect_rtnl(Manager *m, int fd) { static int manager_post_handler(sd_event_source *s, void *userdata) { Manager *manager = ASSERT_PTR(userdata); + (void) manager_process_requests(manager); (void) manager_clean_all(manager); return 0; } @@ -513,10 +514,6 @@ int manager_setup(Manager *m) { if (r < 0) return r; - r = sd_event_add_post(m->event, NULL, manager_process_requests, m); - if (r < 0) - return r; - r = manager_listen_fds(m, &rtnl_fd); if (r < 0) return r; diff --git a/src/network/networkd-queue.c b/src/network/networkd-queue.c index a88418e28e..91e874c6fa 100644 --- a/src/network/networkd-queue.c +++ b/src/network/networkd-queue.c @@ -210,10 +210,11 @@ int link_queue_request_full( process, counter, netlink_handler, ret); } -int manager_process_requests(sd_event_source *s, void *userdata) { - Manager *manager = ASSERT_PTR(userdata); +int manager_process_requests(Manager *manager) { int r; + assert(manager); + for (;;) { bool processed = false; Request *req; diff --git a/src/network/networkd-queue.h b/src/network/networkd-queue.h index d6f5de421e..21fa7d9453 100644 --- a/src/network/networkd-queue.h +++ b/src/network/networkd-queue.h @@ -1,7 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -#include "sd-event.h" #include "sd-netlink.h" #include "alloc-util.h" @@ -136,7 +135,7 @@ static inline int link_queue_request( ret); \ }) -int manager_process_requests(sd_event_source *s, void *userdata); +int manager_process_requests(Manager *manager); int request_call_netlink_async(sd_netlink *nl, sd_netlink_message *m, Request *req); const char* request_type_to_string(RequestType t) _const_;