From: Susant Sahani Date: Thu, 21 Apr 2016 14:08:07 +0000 (+0530) Subject: networkd: When link gets dirty mark manager dirty too (#3080) X-Git-Tag: v230~157 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0c241a378d9fdb0a1f462829e1e2ba9e8b036c06;p=thirdparty%2Fsystemd.git networkd: When link gets dirty mark manager dirty too (#3080) If we not marking manager dirty when link is dirty then the state file is not updated. This is a side effect of issue 2850 setting CriticalConnection=yes timesyncd NTP servers given by DHCP server are ignored. --- diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 0fb3aa6c438..5cdf123652a 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -299,7 +299,6 @@ void link_update_operstate(Link *link) { link->operstate = operstate; link_send_changed(link, "OperationalState", NULL); link_dirty(link); - manager_dirty(link->manager); } } @@ -3228,14 +3227,17 @@ void link_dirty(Link *link) { assert(link); + /* mark manager dirty as link is dirty */ + manager_dirty(link->manager); + r = set_ensure_allocated(&link->manager->dirty_links, NULL); if (r < 0) /* allocation errors are ignored */ return; r = set_put(link->manager->dirty_links, link); - if (r < 0) - /* allocation errors are ignored */ + if (r <= 0) + /* don't take another ref if the link was already dirty */ return; link_ref(link);