From 65ca9b53431aa4c75f9cb1436586655847ed78b7 Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Thu, 14 Jan 2021 06:00:53 +0100 Subject: [PATCH 01/19] homed: use ordered_set_ensure_put --- src/home/homed-home.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/home/homed-home.c b/src/home/homed-home.c index 7f4532e0cc..38b7e20ca6 100644 --- a/src/home/homed-home.c +++ b/src/home/homed-home.c @@ -2656,11 +2656,7 @@ int home_schedule_operation(Home *h, Operation *o, sd_bus_error *error) { if (ordered_set_size(h->pending_operations) >= PENDING_OPERATIONS_MAX) return sd_bus_error_setf(error, BUS_ERROR_TOO_MANY_OPERATIONS, "Too many client operations requested"); - r = ordered_set_ensure_allocated(&h->pending_operations, &operation_hash_ops); - if (r < 0) - return r; - - r = ordered_set_put(h->pending_operations, o); + r = ordered_set_ensure_put(&h->pending_operations, &operation_hash_ops, o); if (r < 0) return r; From 1346c36d5afa48a39b36485d80552fc1ae24ed12 Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Thu, 14 Jan 2021 06:19:47 +0100 Subject: [PATCH 02/19] basic: introuce hashmap_ensure_put --- src/basic/hashmap.c | 10 ++++++++++ src/basic/hashmap.h | 3 +++ 2 files changed, 13 insertions(+) diff --git a/src/basic/hashmap.c b/src/basic/hashmap.c index cdc6847edf..c118289b99 100644 --- a/src/basic/hashmap.c +++ b/src/basic/hashmap.c @@ -845,6 +845,16 @@ int _set_ensure_allocated(Set **s, const struct hash_ops *hash_ops HASHMAP_DEBU return hashmap_base_ensure_allocated((HashmapBase**)s, hash_ops, HASHMAP_TYPE_SET HASHMAP_DEBUG_PASS_ARGS); } +int _hashmap_ensure_put(Hashmap **h, const struct hash_ops *hash_ops, const void *key, void *value HASHMAP_DEBUG_PARAMS) { + int r; + + r = _hashmap_ensure_allocated(h, hash_ops HASHMAP_DEBUG_PASS_ARGS); + if (r < 0) + return r; + + return hashmap_put(*h, key, value); +} + int _ordered_hashmap_ensure_put(OrderedHashmap **h, const struct hash_ops *hash_ops, const void *key, void *value HASHMAP_DEBUG_PARAMS) { int r; diff --git a/src/basic/hashmap.h b/src/basic/hashmap.h index e99448375e..c20ee8eb4b 100644 --- a/src/basic/hashmap.h +++ b/src/basic/hashmap.h @@ -133,8 +133,11 @@ HashmapBase* _hashmap_copy(HashmapBase *h HASHMAP_DEBUG_PARAMS); #define ordered_hashmap_copy(h) ((OrderedHashmap*) _hashmap_copy(HASHMAP_BASE(h) HASHMAP_DEBUG_SRC_ARGS)) int _hashmap_ensure_allocated(Hashmap **h, const struct hash_ops *hash_ops HASHMAP_DEBUG_PARAMS); +int _hashmap_ensure_put(Hashmap **h, const struct hash_ops *hash_ops, const void *key, void *value HASHMAP_DEBUG_PARAMS); int _ordered_hashmap_ensure_allocated(OrderedHashmap **h, const struct hash_ops *hash_ops HASHMAP_DEBUG_PARAMS); + #define hashmap_ensure_allocated(h, ops) _hashmap_ensure_allocated(h, ops HASHMAP_DEBUG_SRC_ARGS) +#define hashmap_ensure_put(s, ops, key, value) _hashmap_ensure_put(s, ops, key, value HASHMAP_DEBUG_SRC_ARGS) #define ordered_hashmap_ensure_allocated(h, ops) _ordered_hashmap_ensure_allocated(h, ops HASHMAP_DEBUG_SRC_ARGS) int _ordered_hashmap_ensure_put(OrderedHashmap **h, const struct hash_ops *hash_ops, const void *key, void *value HASHMAP_DEBUG_PARAMS); From c6194e88255150958713394f81f99fb7f16523e8 Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Thu, 14 Jan 2021 06:21:09 +0100 Subject: [PATCH 03/19] generator: Use hashmap_ensure_put --- src/network/generator/network-generator.c | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/src/network/generator/network-generator.c b/src/network/generator/network-generator.c index f9b51d8b7b..940a718d20 100644 --- a/src/network/generator/network-generator.c +++ b/src/network/generator/network-generator.c @@ -190,11 +190,7 @@ static int network_new(Context *context, const char *name, Network **ret) { .dhcp_use_dns = -1, }; - r = hashmap_ensure_allocated(&context->networks_by_name, &string_hash_ops); - if (r < 0) - return r; - - r = hashmap_put(context->networks_by_name, network->ifname, network); + r = hashmap_ensure_put(&context->networks_by_name, &string_hash_ops, network->ifname, network); if (r < 0) return r; @@ -247,11 +243,7 @@ static int netdev_new(Context *context, const char *_kind, const char *_ifname, .ifname = TAKE_PTR(ifname), }; - r = hashmap_ensure_allocated(&context->netdevs_by_name, &string_hash_ops); - if (r < 0) - return r; - - r = hashmap_put(context->netdevs_by_name, netdev->ifname, netdev); + r = hashmap_ensure_put(&context->netdevs_by_name, &string_hash_ops, netdev->ifname, netdev); if (r < 0) return r; @@ -299,11 +291,7 @@ static int link_new(Context *context, const char *name, struct ether_addr *mac, .mac = *mac, }; - r = hashmap_ensure_allocated(&context->links_by_name, &string_hash_ops); - if (r < 0) - return r; - - r = hashmap_put(context->links_by_name, link->ifname, link); + r = hashmap_ensure_put(&context->links_by_name, &string_hash_ops, link->ifname, link); if (r < 0) return r; From c26f9a9d8cdc2a9f0dd78bec89ea97505eedda7e Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Thu, 14 Jan 2021 06:24:02 +0100 Subject: [PATCH 04/19] network: netdev - Use hashmap_ensure_put --- src/network/netdev/netdev.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/network/netdev/netdev.c b/src/network/netdev/netdev.c index 755a67fea8..81e8fd7cf1 100644 --- a/src/network/netdev/netdev.c +++ b/src/network/netdev/netdev.c @@ -756,11 +756,9 @@ int netdev_load_one(Manager *manager, const char *filename) { netdev->ifname); } - r = hashmap_ensure_allocated(&netdev->manager->netdevs, &string_hash_ops); - if (r < 0) - return r; - - r = hashmap_put(netdev->manager->netdevs, netdev->ifname, netdev); + r = hashmap_ensure_put(&netdev->manager->netdevs, &string_hash_ops, netdev->ifname, netdev); + if (r == -ENOMEM) + return log_oom(); if (r == -EEXIST) { NetDev *n = hashmap_get(netdev->manager->netdevs, netdev->ifname); From b77071b8989bd7859804087711fa37ca23b0027b Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Thu, 14 Jan 2021 06:25:12 +0100 Subject: [PATCH 05/19] network: wireguard - Use hashmap_ensure_put --- src/network/netdev/wireguard.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/network/netdev/wireguard.c b/src/network/netdev/wireguard.c index 76444bdd7c..e442ecc266 100644 --- a/src/network/netdev/wireguard.c +++ b/src/network/netdev/wireguard.c @@ -91,11 +91,7 @@ static int wireguard_peer_new_static(Wireguard *w, const char *filename, unsigne LIST_PREPEND(peers, w->peers, peer); - r = hashmap_ensure_allocated(&w->peers_by_section, &network_config_hash_ops); - if (r < 0) - return r; - - r = hashmap_put(w->peers_by_section, peer->section, peer); + r = hashmap_ensure_put(&w->peers_by_section, &network_config_hash_ops, peer->section, peer); if (r < 0) return r; From fb8ac4cf3e19d8633cdc8c0315d4e219f7167295 Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Thu, 14 Jan 2021 06:28:04 +0100 Subject: [PATCH 06/19] network: address label - use hashmap_ensure_put --- src/network/networkd-address-label.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/network/networkd-address-label.c b/src/network/networkd-address-label.c index f933a1da94..7f756cfe40 100644 --- a/src/network/networkd-address-label.c +++ b/src/network/networkd-address-label.c @@ -55,11 +55,7 @@ static int address_label_new_static(Network *network, const char *filename, unsi .section = TAKE_PTR(n), }; - r = hashmap_ensure_allocated(&network->address_labels_by_section, &network_config_hash_ops); - if (r < 0) - return r; - - r = hashmap_put(network->address_labels_by_section, label->section, label); + r = hashmap_ensure_put(&network->address_labels_by_section, &network_config_hash_ops, label->section, label); if (r < 0) return r; From c75165cade8dc306ae84145c200d37622600a67f Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Thu, 14 Jan 2021 06:30:39 +0100 Subject: [PATCH 07/19] network: dhcp6 - use hashmap_ensure_put --- src/network/networkd-dhcp6.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/network/networkd-dhcp6.c b/src/network/networkd-dhcp6.c index 9571221da2..d9b45a8a14 100644 --- a/src/network/networkd-dhcp6.c +++ b/src/network/networkd-dhcp6.c @@ -309,11 +309,9 @@ static int dhcp6_set_pd_route(Link *link, const union in_addr_union *prefix, con .link = link_ref(link), }; - r = hashmap_ensure_allocated(&link->manager->dhcp6_prefixes, &in6_addr_hash_ops); - if (r < 0) + r = hashmap_ensure_put(&link->manager->dhcp6_prefixes, &in6_addr_hash_ops, &pd->prefix, pd); + if (r == -ENOMEM) return log_oom(); - - r = hashmap_put(link->manager->dhcp6_prefixes, &pd->prefix, pd); if (r < 0) return log_link_error_errno(link, r, "Failed to store DHCPv6 prefix route at manager: %m"); From 03d2d9e18fc5f577f9aef4ffa708406ef877ca35 Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Thu, 14 Jan 2021 06:32:05 +0100 Subject: [PATCH 08/19] network: fdb - Use hashmap_ensure_put --- src/network/networkd-fdb.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/network/networkd-fdb.c b/src/network/networkd-fdb.c index 283dece04f..c18e4d81d9 100644 --- a/src/network/networkd-fdb.c +++ b/src/network/networkd-fdb.c @@ -79,11 +79,7 @@ static int fdb_entry_new_static( .fdb_ntf_flags = NEIGHBOR_CACHE_ENTRY_FLAGS_SELF, }; - r = hashmap_ensure_allocated(&network->fdb_entries_by_section, &network_config_hash_ops); - if (r < 0) - return r; - - r = hashmap_put(network->fdb_entries_by_section, fdb_entry->section, fdb_entry); + r = hashmap_ensure_put(&network->fdb_entries_by_section, &network_config_hash_ops, fdb_entry->section, fdb_entry); if (r < 0) return r; From 967d72ed93cf388bef947bee4c5b74c96832da29 Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Thu, 14 Jan 2021 06:33:52 +0100 Subject: [PATCH 09/19] network: link - use hashmap_ensure_put --- src/network/networkd-link.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index aa82576c17..6de0d7003a 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -449,11 +449,7 @@ static int link_new(Manager *manager, sd_netlink_message *message, Link **ret) { if (asprintf(&link->lldp_file, "/run/systemd/netif/lldp/%d", link->ifindex) < 0) return -ENOMEM; - r = hashmap_ensure_allocated(&manager->links, NULL); - if (r < 0) - return r; - - r = hashmap_put(manager->links, INT_TO_PTR(link->ifindex), link); + r = hashmap_ensure_put(&manager->links, NULL, INT_TO_PTR(link->ifindex), link); if (r < 0) return r; From 190b3b5c309ba1d16dbcf74f7a998362b87f39d7 Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Thu, 14 Jan 2021 06:42:50 +0100 Subject: [PATCH 10/19] network: link - use hashmap_ensure_put --- src/network/networkd-link.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 6de0d7003a..3fad8f12f8 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -1601,11 +1601,7 @@ static int link_put_carrier(Link *link, Link *carrier, Hashmap **h) { if (hashmap_get(*h, INT_TO_PTR(carrier->ifindex))) return 0; - r = hashmap_ensure_allocated(h, NULL); - if (r < 0) - return r; - - r = hashmap_put(*h, INT_TO_PTR(carrier->ifindex), carrier); + r = hashmap_ensure_put(h, NULL, INT_TO_PTR(carrier->ifindex), carrier); if (r < 0) return r; From f222165e3da80faded47a204cde51586d1edc0fe Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Thu, 14 Jan 2021 06:54:47 +0100 Subject: [PATCH 11/19] network: mdb - use hashmap_ensure_put --- src/network/networkd-mdb.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/network/networkd-mdb.c b/src/network/networkd-mdb.c index 7007a8202d..0037b21396 100644 --- a/src/network/networkd-mdb.c +++ b/src/network/networkd-mdb.c @@ -70,11 +70,7 @@ static int mdb_entry_new_static( .section = TAKE_PTR(n), }; - r = hashmap_ensure_allocated(&network->mdb_entries_by_section, &network_config_hash_ops); - if (r < 0) - return r; - - r = hashmap_put(network->mdb_entries_by_section, mdb_entry->section, mdb_entry); + r = hashmap_ensure_put(&network->mdb_entries_by_section, &network_config_hash_ops, mdb_entry->section, mdb_entry); if (r < 0) return r; From 700661ed75d9b5d05ec6ad3e8972f10ab7f3fb2a Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Thu, 14 Jan 2021 07:01:11 +0100 Subject: [PATCH 12/19] network: neighbor - use hashmap_ensure_put --- src/network/networkd-neighbor.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/network/networkd-neighbor.c b/src/network/networkd-neighbor.c index 847ecd27c3..22b716b14a 100644 --- a/src/network/networkd-neighbor.c +++ b/src/network/networkd-neighbor.c @@ -60,11 +60,7 @@ static int neighbor_new_static(Network *network, const char *filename, unsigned .section = TAKE_PTR(n), }; - r = hashmap_ensure_allocated(&network->neighbors_by_section, &network_config_hash_ops); - if (r < 0) - return r; - - r = hashmap_put(network->neighbors_by_section, neighbor->section, neighbor); + r = hashmap_ensure_put(&network->neighbors_by_section, &network_config_hash_ops, neighbor->section, neighbor); if (r < 0) return r; From b9eea0a75333a1298e66d254176616bf2f26ae54 Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Thu, 14 Jan 2021 07:02:58 +0100 Subject: [PATCH 13/19] network: radv - Use hashmap_ensure_put --- src/network/networkd-radv.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/network/networkd-radv.c b/src/network/networkd-radv.c index a8e1b2b489..4de6a21122 100644 --- a/src/network/networkd-radv.c +++ b/src/network/networkd-radv.c @@ -75,11 +75,7 @@ static int prefix_new_static(Network *network, const char *filename, unsigned se prefix->network = network; prefix->section = TAKE_PTR(n); - r = hashmap_ensure_allocated(&network->prefixes_by_section, &network_config_hash_ops); - if (r < 0) - return r; - - r = hashmap_put(network->prefixes_by_section, prefix->section, prefix); + r = hashmap_ensure_put(&network->prefixes_by_section, &network_config_hash_ops, prefix->section, prefix); if (r < 0) return r; From ecd80ce26c5926eb36fd44d42e32d2c8f7f9eb83 Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Thu, 14 Jan 2021 07:04:11 +0100 Subject: [PATCH 14/19] network: route - Use hashmap_ensure_put --- src/network/networkd-route.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/network/networkd-route.c b/src/network/networkd-route.c index d23d74d5c8..a9afdabb32 100644 --- a/src/network/networkd-route.c +++ b/src/network/networkd-route.c @@ -227,11 +227,7 @@ static int route_new_static(Network *network, const char *filename, unsigned sec route->network = network; route->section = TAKE_PTR(n); - r = hashmap_ensure_allocated(&network->routes_by_section, &network_config_hash_ops); - if (r < 0) - return r; - - r = hashmap_put(network->routes_by_section, route->section, route); + r = hashmap_ensure_put(&network->routes_by_section, &network_config_hash_ops, route->section, route); if (r < 0) return r; From 7a0c0e0e41142db49ff6c69c93bb1cba737249c5 Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Thu, 14 Jan 2021 07:05:49 +0100 Subject: [PATCH 15/19] network: routing policy rule - Use hashmap_ensure_put --- src/network/networkd-routing-policy-rule.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/network/networkd-routing-policy-rule.c b/src/network/networkd-routing-policy-rule.c index 722e415830..eafd810044 100644 --- a/src/network/networkd-routing-policy-rule.c +++ b/src/network/networkd-routing-policy-rule.c @@ -100,11 +100,7 @@ static int routing_policy_rule_new_static(Network *network, const char *filename rule->section = TAKE_PTR(n); rule->protocol = RTPROT_STATIC; - r = hashmap_ensure_allocated(&network->rules_by_section, &network_config_hash_ops); - if (r < 0) - return r; - - r = hashmap_put(network->rules_by_section, rule->section, rule); + r = hashmap_ensure_put(&network->rules_by_section, &network_config_hash_ops, rule->section, rule); if (r < 0) return r; From 4f38ba3889a6ac82f28e365599c613c5c5e87502 Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Fri, 15 Jan 2021 14:32:16 +0100 Subject: [PATCH 16/19] network: online - use hashmap_ensure_put --- src/network/wait-online/wait-online.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/network/wait-online/wait-online.c b/src/network/wait-online/wait-online.c index c2bdcd4907..d6716e1874 100644 --- a/src/network/wait-online/wait-online.c +++ b/src/network/wait-online/wait-online.c @@ -83,11 +83,9 @@ static int parse_interface_with_operstate_range(const char *str) { return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Invalid interface name '%s'", ifname); - r = hashmap_ensure_allocated(&arg_interfaces, &string_hash_ops); - if (r < 0) + r = hashmap_ensure_put(&arg_interfaces, &string_hash_ops, ifname, TAKE_PTR(range)); + if (r == -ENOMEM) return log_oom(); - - r = hashmap_put(arg_interfaces, ifname, TAKE_PTR(range)); if (r < 0) return log_error_errno(r, "Failed to store interface name: %m"); if (r == 0) From 92a74c4744cbf752e43387026963d4821073a340 Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Thu, 14 Jan 2021 07:18:59 +0100 Subject: [PATCH 17/19] udevd: Use hashmap_ensure_put --- src/udev/udevd.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/udev/udevd.c b/src/udev/udevd.c index ef344e8a4d..84d05d79f3 100644 --- a/src/udev/udevd.c +++ b/src/udev/udevd.c @@ -211,11 +211,7 @@ static int worker_new(struct worker **ret, Manager *manager, sd_device_monitor * .pid = pid, }; - r = hashmap_ensure_allocated(&manager->workers, &worker_hash_op); - if (r < 0) - return r; - - r = hashmap_put(manager->workers, PID_TO_PTR(pid), worker); + r = hashmap_ensure_put(&manager->workers, &worker_hash_op, PID_TO_PTR(pid), worker); if (r < 0) return r; From dcd46cc42d99c228d91eadc2a3fc2780b578413d Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Sat, 16 Jan 2021 23:10:18 +0100 Subject: [PATCH 18/19] network: use hashmap_ensure_put --- src/network/networkd-network.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c index a74a1e946e..0920a9d282 100644 --- a/src/network/networkd-network.c +++ b/src/network/networkd-network.c @@ -142,11 +142,9 @@ static int network_resolve_stacked_netdevs(Network *network) { if (r <= 0) continue; - r = hashmap_ensure_allocated(&network->stacked_netdevs, &string_hash_ops); - if (r < 0) + r = hashmap_ensure_put(&network->stacked_netdevs, &string_hash_ops, netdev->ifname, netdev); + if (r == -ENOMEM) return log_oom(); - - r = hashmap_put(network->stacked_netdevs, netdev->ifname, netdev); if (r < 0) return log_error_errno(r, "%s: Failed to add NetDev '%s' to network: %m", network->filename, (const char *) name); From a307a7dd3864ed0185ccb3efe31f28efcc9703fe Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Thu, 14 Jan 2021 07:22:49 +0100 Subject: [PATCH 19/19] network: nexthop - use hashmap_ensure_put --- src/network/networkd-nexthop.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/network/networkd-nexthop.c b/src/network/networkd-nexthop.c index 13f532763d..98db2d3e3e 100644 --- a/src/network/networkd-nexthop.c +++ b/src/network/networkd-nexthop.c @@ -79,11 +79,7 @@ static int nexthop_new_static(Network *network, const char *filename, unsigned s nexthop->network = network; nexthop->section = TAKE_PTR(n); - r = hashmap_ensure_allocated(&network->nexthops_by_section, &network_config_hash_ops); - if (r < 0) - return r; - - r = hashmap_put(network->nexthops_by_section, nexthop->section, nexthop); + r = hashmap_ensure_put(&network->nexthops_by_section, &network_config_hash_ops, nexthop->section, nexthop); if (r < 0) return r;