]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
core/device: do not downgrade device state if it is already enumerated 23517/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 20 May 2022 08:25:12 +0000 (10:25 +0200)
committerFrantisek Sumsal <frantisek@sumsal.cz>
Thu, 26 May 2022 15:07:59 +0000 (17:07 +0200)
On switching root, a device may have a persistent databse. In that case,
Device.enumerated_found may have DEVICE_FOUND_UDEV flag, and it is not
necessary to downgrade the Device.deserialized_found and
Device.deserialized_state. Otherwise, the state of the device unit may
be changed plugged -> dead -> plugged, if the device has not been mounted.

Fixes #23429.

[mwilck: cherry-picked from #23437]

src/core/device.c

index 87286305234995ab30f4b256eb318aacaa2841cd..fcde8a420e6de05e34199f42a1733e104c23c7de 100644 (file)
@@ -201,7 +201,8 @@ static int device_coldplug(Unit *u) {
          *   Of course, deserialized parameters may be outdated, but the unit state can be adjusted later by
          *   device_catchup() or uevents. */
 
-        if (!m->honor_device_enumeration && !MANAGER_IS_USER(m)) {
+        if (!m->honor_device_enumeration && !MANAGER_IS_USER(m) &&
+            !FLAGS_SET(d->enumerated_found, DEVICE_FOUND_UDEV)) {
                 found &= ~DEVICE_FOUND_UDEV; /* ignore DEVICE_FOUND_UDEV bit */
                 if (state == DEVICE_PLUGGED)
                         state = DEVICE_TENTATIVE; /* downgrade state */