summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2021-05-17 15:40:15 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2021-05-18 20:40:56 +0900
commit63130eb36dc51e4fd50716c585f98ebe456ca7cf (patch)
tree0c145269aebeb49e1487d0f7ad983ad9e289bad0
parentce9388d72a710ffc4840572fecdfe7d9c0be0956 (diff)
downloadsystemd-63130eb36dc51e4fd50716c585f98ebe456ca7cf.tar.gz
network: merge link_drop() and link_detach_from_manager()
link_detach_from_manager() is only called by link_drop(). It is not necessary to split such tiny function.
-rw-r--r--src/network/networkd-link.c27
1 files changed, 12 insertions, 15 deletions
diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c
index 9d30e16b0a..67d01ac44d 100644
--- a/src/network/networkd-link.c
+++ b/src/network/networkd-link.c
@@ -1771,24 +1771,17 @@ static void link_drop_from_master(Link *link, NetDev *netdev) {
link_unref(set_remove(master->slaves, link));
}
-static void link_detach_from_manager(Link *link) {
- if (!link || !link->manager)
- return;
-
- link_unref(set_remove(link->manager->links_requesting_uuid, link));
- link_clean(link);
-
- /* The following must be called at last. */
- assert_se(hashmap_remove(link->manager->links, INT_TO_PTR(link->ifindex)) == link);
- link_unref(link);
-}
-
static void link_drop(Link *link) {
- if (!link || link->state == LINK_STATE_LINGER)
+ if (!link)
return;
+ assert(link->manager);
+
link_set_state(link, LINK_STATE_LINGER);
+ /* Drop all references from other links and manager. Note that async netlink calls may have
+ * references to the link, and they will be dropped when we receive replies. */
+
link_free_carrier_maps(link);
if (link->network) {
@@ -1797,10 +1790,14 @@ static void link_drop(Link *link) {
link_drop_from_master(link, link->network->bond);
}
- log_link_debug(link, "Link removed");
+ link_unref(set_remove(link->manager->links_requesting_uuid, link));
(void) unlink(link->state_file);
- link_detach_from_manager(link);
+ link_clean(link);
+
+ /* The following must be called at last. */
+ assert_se(hashmap_remove(link->manager->links, INT_TO_PTR(link->ifindex)) == link);
+ link_unref(link);
}
int link_activate(Link *link) {