From bf60fd5acc22ac73a911796d2f9bc33e46b1ba5d Mon Sep 17 00:00:00 2001 From: Lubomir Rintel Date: Fri, 30 Sep 2022 17:41:26 +0200 Subject: [PATCH] device: fix recheck slave logic Since commit a1de6810df46 ('device: don't ignore external slave removals') we don't leave device_recheck_slave_status() on un-eslaving (that is plink->master = 0) early enough. This results in hooking of NM_MANAGER_DEVICE_IFINDEX_CHANGED even when we're not actually waiting for any master device to come up, accompanied by a messed up log entry: device[3fa7cfc200be4e84] (portXc): enslaved to unknown device 0 (??) We also log nonsense when we see any device's link being removed: device[a9a4b65bde851bcf] (br0): ifindex: set ifindex 0 (old-l3cfg: 05c6a4409f84d9d2) device[45d34e95fb71cce0] (portXa): master br0 with ifindex 0 appeared We don't do further damage afterwards, so this is purely a cosmetic annoyance. --- src/core/devices/nm-device.c | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c index 3a7009e6c2..d4d21a408a 100644 --- a/src/core/devices/nm-device.c +++ b/src/core/devices/nm-device.c @@ -6573,27 +6573,30 @@ device_recheck_slave_status(NMDevice *self, const NMPlatformLink *plink) NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED); } - if (master && NM_DEVICE_GET_CLASS(master)->attach_port) { - nm_device_master_add_slave(master, self, FALSE); + if (master) { + if (NM_DEVICE_GET_CLASS(master)->attach_port) { + nm_device_master_add_slave(master, self, FALSE); + } else { + _LOGD(LOGD_DEVICE, + "enslaved to non-master-type device %s; ignoring", + nm_device_get_iface(master)); + } goto out; } - if (master) { - _LOGD(LOGD_DEVICE, - "enslaved to non-master-type device %s; ignoring", - nm_device_get_iface(master)); - } else { + if (plink->master) { _LOGD(LOGD_DEVICE, "enslaved to unknown device %d (%s%s%s)", plink->master, NM_PRINT_FMT_QUOTED(plink_master, "\"", plink_master->name, "\"", "??")); + if (!priv->ifindex_changed_id) { + priv->ifindex_changed_id = g_signal_connect(nm_device_get_manager(self), + NM_MANAGER_DEVICE_IFINDEX_CHANGED, + G_CALLBACK(device_ifindex_changed_cb), + self); + } } - if (!priv->ifindex_changed_id) { - priv->ifindex_changed_id = g_signal_connect(nm_device_get_manager(self), - NM_MANAGER_DEVICE_IFINDEX_CHANGED, - G_CALLBACK(device_ifindex_changed_cb), - self); - } + return; out: