From 92796278f8b6614d272de85159555ff2f8776353 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Fri, 21 Jan 2022 05:22:33 +0900 Subject: [PATCH] resolve: reduce attempts of reading link file The function `link_relevant()` is called repeatedly in `link_allocate_scopes()`. Let's not read networkd's link file in `link_relevant()`. Closes #22190. --- src/resolve/resolved-link.c | 9 ++++++--- src/resolve/resolved-link.h | 2 ++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/resolve/resolved-link.c b/src/resolve/resolved-link.c index 099050876b2..9eb0ccefd12 100644 --- a/src/resolve/resolved-link.c +++ b/src/resolve/resolved-link.c @@ -616,6 +616,10 @@ static void link_read_settings(Link *l) { l->is_managed = true; + r = network_link_get_operational_state(l->ifindex, &l->networkd_operstate); + if (r < 0) + log_link_warning_errno(l, r, "Failed to read networkd's link operational state, ignoring: %m"); + r = link_update_dns_servers(l); if (r < 0) log_link_warning_errno(l, r, "Failed to read DNS servers for the interface, ignoring: %m"); @@ -678,7 +682,6 @@ int link_update(Link *l) { } bool link_relevant(Link *l, int family, bool local_multicast) { - _cleanup_free_ char *state = NULL; LinkAddress *a; assert(l); @@ -702,8 +705,8 @@ bool link_relevant(Link *l, int family, bool local_multicast) { if (!netif_has_carrier(l->operstate, l->flags)) return false; - (void) sd_network_link_get_operational_state(l->ifindex, &state); - if (state && !STR_IN_SET(state, "unknown", "degraded", "degraded-carrier", "routable")) + if (l->is_managed && + !IN_SET(l->networkd_operstate, LINK_OPERSTATE_DEGRADED_CARRIER, LINK_OPERSTATE_DEGRADED, LINK_OPERSTATE_ROUTABLE)) return false; LIST_FOREACH(addresses, a, l->addresses) diff --git a/src/resolve/resolved-link.h b/src/resolve/resolved-link.h index f65718ce310..b5299e0b5b8 100644 --- a/src/resolve/resolved-link.h +++ b/src/resolve/resolved-link.h @@ -6,6 +6,7 @@ #include "sd-netlink.h" #include "in-addr-util.h" +#include "network-util.h" #include "ratelimit.h" #include "resolve-util.h" @@ -68,6 +69,7 @@ struct Link { DnsScope *mdns_ipv6_scope; struct stat networkd_state_file_stat; + LinkOperationalState networkd_operstate; bool is_managed; char *ifname; -- 2.47.3