]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
resolve: reduce attempts of reading link file 22199/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 20 Jan 2022 20:22:33 +0000 (05:22 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 20 Jan 2022 21:22:39 +0000 (06:22 +0900)
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
src/resolve/resolved-link.h

index 099050876b23cec86b232adc39c9f071ac562123..9eb0ccefd121ce3c7f6ac9c23cbd193a3fdad2fa 100644 (file)
@@ -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)
index f65718ce310ca6d50a81147d4734ec4d158210e5..b5299e0b5b87ae5577e88cf26b644c7675451ace 100644 (file)
@@ -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;