summaryrefslogtreecommitdiff
path: root/src/resolve/resolved-link.c
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2022-01-21 05:22:33 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2022-01-21 06:22:39 +0900
commit92796278f8b6614d272de85159555ff2f8776353 (patch)
tree33542acfd5c52a94f70c38044aa7a1242832924e /src/resolve/resolved-link.c
parent1a4152f02b0c8c80e99a4b43745db1e96a793c50 (diff)
downloadsystemd-92796278f8b6614d272de85159555ff2f8776353.tar.gz
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.
Diffstat (limited to 'src/resolve/resolved-link.c')
-rw-r--r--src/resolve/resolved-link.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/resolve/resolved-link.c b/src/resolve/resolved-link.c
index 099050876b..9eb0ccefd1 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)