mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2025-12-27 07:00:09 +01:00
linux-platform: re-read the link type if the name changed
For some device types, we use the DEVTYPE from sysfs to determine the
link type. However, the way we read from sysfs can race with device
renames and we could miss the chance to read DEVTYPE correctly.
This doesn't completely fix the sysfs race, but cures the boot-time race
with systemd renaming the device while we are initializing the link.
We ideally should use GUDev for all sysfs accesses, but that would need
some more work for this particular case as currently we need the link type
before we have an udev device instance.
https://bugzilla.gnome.org/show_bug.cgi?id=764803
Co-Authored-By: Beniamino Galvani <bgalvani@redhat.com>
(cherry picked from commit dd4d8b24da)
This commit is contained in:
parent
459293e501
commit
52fc28893f
1 changed files with 4 additions and 1 deletions
|
|
@ -632,7 +632,9 @@ _linktype_get_type (NMPlatform *platform,
|
|||
obj = _lookup_cached_link (cache, ifindex, completed_from_cache, link_cached);
|
||||
|
||||
/* If we detected the link type before, we stick to that
|
||||
* decision unless the "kind" changed.
|
||||
* decision unless the "kind" no "name" changed. If "name" changed,
|
||||
* it means that their type may not have been determined correctly
|
||||
* due to race conditions while accessing sysfs.
|
||||
*
|
||||
* This way, we save edditional ethtool/sysctl lookups, but moreover,
|
||||
* we keep the linktype stable and don't change it as long as the link
|
||||
|
|
@ -643,6 +645,7 @@ _linktype_get_type (NMPlatform *platform,
|
|||
* of messing stuff up. */
|
||||
if ( obj
|
||||
&& !NM_IN_SET (obj->link.type, NM_LINK_TYPE_UNKNOWN, NM_LINK_TYPE_NONE)
|
||||
&& !g_strcmp0 (ifname, obj->link.name)
|
||||
&& ( !kind
|
||||
|| !g_strcmp0 (kind, obj->link.kind))) {
|
||||
nm_assert (obj->link.kind == g_intern_string (obj->link.kind));
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue