device: fix autoactivating virtual devices after a failure

When a virtual device fails, its state goes to FAIL and then
DISCONNECTED. In DISCONNECTED we call schedule_activate_check() to
schedule an auto-activation if needed. We also schudule the deletion
of the link through delete_on_deactivate_check_and_schedule(). The
auto-activation attempt fails because the link deletion unmanages the
device; as a result, the device doesn't try to auto-activate again.

To fix this:

 - don't allow the device to auto-activate if the device deletion is
   pending;

 - check again if the device can be auto-activated after its deletion.

https://bugzilla.redhat.com/show_bug.cgi?id=1818697
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/613
This commit is contained in:
Beniamino Galvani 2020-08-27 14:29:23 +02:00
parent a75dfc73e2
commit e404585e60

View file

@ -6023,6 +6023,9 @@ nm_device_autoconnect_allowed (NMDevice *self)
return FALSE;
}
if (priv->delete_on_deactivate_data)
return FALSE;
/* The 'autoconnect-allowed' signal is emitted on a device to allow
* other listeners to block autoconnect on the device if they wish.
* This is mainly used by the OLPC Mesh devices to block autoconnect
@ -12058,6 +12061,8 @@ delete_on_deactivate_link_delete (gpointer user_data)
} else if (data->ifindex > 0)
nm_platform_link_delete (nm_device_get_platform (self), data->ifindex);
nm_device_emit_recheck_auto_activate (self);
g_free (data);
return FALSE;
}