From 45420fd39fbcd42bfc57694ea924dfa57042fa85 Mon Sep 17 00:00:00 2001 From: Lubomir Rintel Date: Tue, 11 Oct 2022 15:14:04 +0200 Subject: [PATCH] team: set port configuration even if it's empty Call teamdctl_port_config_update_raw() when we're attaching a port even if all of team-slave setting properties are default. This is done to ensure teamd "knows" about the port (that is, "teamdctl ... port present" returns success) when we're done activating the slave connection. It will pick it up anyway from netlink, but that can happen after the activation is done, resulting in a possible race. Fixes-test: @remove_active_team_profile https://bugzilla.redhat.com/show_bug.cgi?id=2102375 --- src/core/devices/team/nm-device-team.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/src/core/devices/team/nm-device-team.c b/src/core/devices/team/nm-device-team.c index 49ce953df1..c3781dff2c 100644 --- a/src/core/devices/team/nm-device-team.c +++ b/src/core/devices/team/nm-device-team.c @@ -866,22 +866,20 @@ attach_port(NMDevice *device, s_team_port = nm_connection_get_setting_team_port(connection); if (s_team_port) { - const char *config = nm_setting_team_port_get_config(s_team_port); + char *sanitized_config; - if (config) { - char *sanitized_config = g_strdup(config); - g_strdelimit(sanitized_config, "\r\n", ' '); + sanitized_config = g_strdup(nm_setting_team_port_get_config(s_team_port) ?: "{}"); + g_strdelimit(sanitized_config, "\r\n", ' '); - g_hash_table_insert(priv->port_configs, g_strdup(port_iface), sanitized_config); + g_hash_table_insert(priv->port_configs, g_strdup(port_iface), sanitized_config); - if (!priv->tdc) { - _LOGW(LOGD_TEAM, - "attached team port %s config not changed, not connected to teamd", - port_iface); - } else { - if (!_update_port_config(self, port_iface, sanitized_config)) - return FALSE; - } + if (!priv->tdc) { + _LOGW(LOGD_TEAM, + "attached team port %s config not changed, not connected to teamd", + port_iface); + } else { + if (!_update_port_config(self, port_iface, sanitized_config)) + return FALSE; } } success = nm_platform_link_enslave(nm_device_get_platform(device),