From 0a43082efa9efdb83d5dcb02cf06cffa440ca2e4 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 https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1421 (cherry picked from commit 6897f6e6df9f8a36950694bdd6146d27349f353d) --- 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 d90b766bdb..4e073ddf13 100644 --- a/src/core/devices/team/nm-device-team.c +++ b/src/core/devices/team/nm-device-team.c @@ -865,22 +865,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),