]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
cryptsetup: Fix crypto device missing issue after bootup
authorJinyuan Si <jisi@cisco.com>
Fri, 4 Dec 2020 02:38:28 +0000 (10:38 +0800)
committerLennart Poettering <lennart@poettering.net>
Thu, 10 Dec 2020 19:46:00 +0000 (20:46 +0100)
Normally, the udev rules operate on "change" events. But when
coldplugging, there's an "add" event present. The udev rules have to
recognize this and do some actions in this particular situation, too.
Also, we don't want the nodes to be created prematurely on "add"
events while not coldplugging. The udev rules will check
DM_UDEV_PRIMARY_SOURCE_FLAG to see if the device was activated
correctly before and if not, it ignore the "add" event totally.
This way the udev rules can support udev triggers generating "add"
events (e.g. "udevadm trigger --action=add" or
"echo add > /sys/block/<dm_device>/uevent").

In this case, the udevd service is started after
systemd-cryptsetup@config.service, is started, which will cause udevd
service to miss the "change" uevent with DM_UDEV_PRIMARY_SOURCE_FLAG
flag generated by systemd-cryptsetup@config.service. To solve this
issue, we let the cryptsetup service be started after the udevd
service.

src/shared/generator.c

index 4d49b7d52b7745ebd85043914654a1d112115177..1eccc5a2895b991fa592e84e465e092bf722db6c 100644 (file)
@@ -564,7 +564,7 @@ int generator_write_cryptsetup_unit_section(
         fprintf(f,
                 "DefaultDependencies=no\n"
                 "IgnoreOnIsolate=true\n"
-                "After=cryptsetup-pre.target\n"
+                "After=cryptsetup-pre.target systemd-udevd-kernel.socket\n"
                 "Before=blockdev@dev-mapper-%%i.target\n"
                 "Wants=blockdev@dev-mapper-%%i.target\n");