]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
core/device: device_coldplug(): don't set DEVICE_DEAD
authorMartin Wilck <mwilck@suse.com>
Wed, 25 May 2022 10:01:00 +0000 (12:01 +0200)
committerFrantisek Sumsal <frantisek@sumsal.cz>
Thu, 26 May 2022 13:06:41 +0000 (15:06 +0200)
dm-crypt device units generated by systemd-cryptsetup-generator
habe BindsTo= dependencies on their backend devices. The dm-crypt
devices have the db_persist flag set, and thus survive the udev db
cleanup while switching root. But backend devices usually don't survive.
These devices are neither mounted nor used for swap, thus they will
seen as DEVICE_NOT_FOUND after switching root.

The BindsTo dependency will cause systemd to schedule a stop
job for the dm-crypt device, breaking boot:

[   68.929457] krypton systemd[1]: systemd-cryptsetup@cr_root.service: Unit is stopped because bound to inactive unit dev-disk-by\x2duuid-3bf91f73\x2d1ee8\x2d4cfc\x2d9048\x2d93ba349b786d.device.
[   68.945660] krypton systemd[1]: systemd-cryptsetup@cr_root.service: Trying to enqueue job systemd-cryptsetup@cr_root.service/stop/replace
[   69.473459] krypton systemd[1]: systemd-cryptsetup@cr_root.service: Installed new job systemd-cryptsetup@cr_root.service/stop as 343

Avoid this by not setting the state of the backend devices to
DEVICE_DEAD.

Fixes the LUKS setup issue reported in #23429.

src/core/device.c

index 4c261ec554dd76182c731b4fe0a109bf14261f61..87286305234995ab30f4b256eb318aacaa2841cd 100644 (file)
@@ -205,8 +205,6 @@ static int device_coldplug(Unit *u) {
                 found &= ~DEVICE_FOUND_UDEV; /* ignore DEVICE_FOUND_UDEV bit */
                 if (state == DEVICE_PLUGGED)
                         state = DEVICE_TENTATIVE; /* downgrade state */
-                if (found == DEVICE_NOT_FOUND)
-                        state = DEVICE_DEAD; /* If nobody sees the device, downgrade more */
         }
 
         if (d->found == found && d->state == state)