From ad8a6a59af1f9f9c74799b0b359622f75d2e828a Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Thu, 13 Oct 2022 17:23:15 +0200 Subject: [PATCH 1/2] dns: add comment explaining the purpose of `any_removed` (cherry picked from commit 4d1ecd8d6dbe6666f9005950a95a6ba8321e653c) (cherry picked from commit 01b4040a7ad6f0b8c4aad1aabe4827841df2fe1e) --- src/core/dns/nm-dns-manager.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/core/dns/nm-dns-manager.c b/src/core/dns/nm-dns-manager.c index 566f3d6626..bdf6fe6580 100644 --- a/src/core/dns/nm-dns-manager.c +++ b/src/core/dns/nm-dns-manager.c @@ -1951,8 +1951,14 @@ nm_dns_manager_set_ip_config(NMDnsManager *self, if (!ip_data) { ip_data = _dns_config_ip_data_new(data, addr_family, source_tag, l3cd, ip_config_type); - if (!any_removed) + if (!any_removed) { + /* `any_removed` tracks whether we deleted any ip_data. If that happened, + * we already compared the old and new l3cds and set `changed` accordingly. + * Here we only need to set `changed` if we are adding a new ip_data without + * removing the old one. + */ changed = TRUE; + } } else { ip_data->ip_config_type = ip_config_type; changed = TRUE; From 6ac62a746f18b630ec6c6a7a3e90c2a7b98a2edf Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Thu, 13 Oct 2022 17:06:19 +0200 Subject: [PATCH 2/2] dns: sort the ip-data list when a new element is added In nm_dns_manager_set_ip_config() we try to avoid calling update_dns() unless something changes, because updating DNS is expensive and can trigger other actions such as a new hostname resolution. When we add a new ip_data, even if the new element is equivalent to the old one that was removed, we need to sort the list again. Fixes: ce0a36d20fa6 ('dns: better track l3cd changes') https://bugzilla.redhat.com/show_bug.cgi?id=2098574 (cherry picked from commit 3cc7801779ed05d13c3e2422f11ddb365bc37242) (cherry picked from commit db4c55c8d32179bcaf222029469802d96312413b) --- src/core/dns/nm-dns-manager.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/core/dns/nm-dns-manager.c b/src/core/dns/nm-dns-manager.c index bdf6fe6580..9c53520b61 100644 --- a/src/core/dns/nm-dns-manager.c +++ b/src/core/dns/nm-dns-manager.c @@ -1951,6 +1951,7 @@ nm_dns_manager_set_ip_config(NMDnsManager *self, if (!ip_data) { ip_data = _dns_config_ip_data_new(data, addr_family, source_tag, l3cd, ip_config_type); + priv->ip_data_lst_need_sort = TRUE; if (!any_removed) { /* `any_removed` tracks whether we deleted any ip_data. If that happened, * we already compared the old and new l3cds and set `changed` accordingly.