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 be more diligent about limiting the special case to OpenVSwitch
interfaces.

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')
This commit is contained in:
Lubomir Rintel 2022-08-31 10:36:24 +02:00
parent 12e5b944f6
commit 269c39b366

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")