device: don't ignore external slave removals

We've been outright ignoring master-slave checks if the link ended up
without a master since commit 2e22880894 ('device: don't remove the
device from master if its link has no master').

This was done to deal with OpenVSwitch port-interface relationship,
where the interface's platform link lacked an actual master in platform
(what matters there is the OVSDB entry), but the fix was too wide.

Let's limit the special case to devices whose were not enslaved to
masters that lack a platform link, which pretty much happens for
OpenVSwitch only.

Morale: Write better commit messages of future you is going to be upset
Fixes: 2e22880894 ('device: don't remove the device from master if its link has no master')

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1358
This commit is contained in:
Lubomir Rintel 2022-08-31 10:36:24 +02:00
parent cfc36db2b7
commit a1de6810df

View File

@ -6536,12 +6536,16 @@ device_recheck_slave_status(NMDevice *self, const NMPlatformLink *plink)
g_return_if_fail(plink);
if (plink->master <= 0)
goto out;
master = nm_manager_get_device_by_ifindex(NM_MANAGER_GET, plink->master);
plink_master = nm_platform_link_get(nm_device_get_platform(self), plink->master);
plink_master_keep_alive = nmp_object_ref(NMP_OBJECT_UP_CAST(plink_master));
if (plink->master > 0) {
master = nm_manager_get_device_by_ifindex(NM_MANAGER_GET, plink->master);
plink_master = nm_platform_link_get(nm_device_get_platform(self), plink->master);
plink_master_keep_alive = nmp_object_ref(NMP_OBJECT_UP_CAST(plink_master));
} else {
if (priv->master_ifindex == 0)
goto out;
master = NULL;
plink_master = NULL;
}
if (master == NULL && plink_master
&& NM_IN_STRSET(plink_master->name, "ovs-system", "ovs-netdev")