]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
units: wait until some fs modules are entirely loaded before mounting their correspon... 17667/head
authorFranck Bui <fbui@suse.com>
Thu, 19 Nov 2020 08:17:19 +0000 (09:17 +0100)
committerFranck Bui <fbui@suse.com>
Thu, 19 Nov 2020 10:50:52 +0000 (11:50 +0100)
udev requests to start the fs mount units when their respective module is
loaded. For that it monitors uevents of type "ADD" for the relevant fs modules.

However the uevent is sent by the kernel too early, ie before the init() of the
module is called hence before directories in /sys/fs/ are created.

This patch workarounds adds "Requires/After=modprobe@<fs-module>.service" to
the mount unit, which means that modprobe(8) will be called once the fs module
is announced to be loaded. This sounds pointless, but given that modprobe only
returns after the initialization of the module is complete, it should
workaround the issue.

As a side effect, the module will be automatically loaded if the mount unit is
started manually.

Fixes #17586.

units/sys-fs-fuse-connections.mount
units/sys-kernel-config.mount

index cbcdd5f2cc960432c3d5497f144c2af786614ef0..b649a1ed199be6bfe96caca1077cb7e04af65f67 100644 (file)
@@ -12,12 +12,18 @@ Description=FUSE Control File System
 Documentation=https://www.kernel.org/doc/Documentation/filesystems/fuse.txt
 Documentation=https://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
 DefaultDependencies=no
-ConditionPathExists=/sys/fs/fuse/connections
 ConditionCapability=CAP_SYS_ADMIN
 ConditionVirtualization=!private-users
-After=systemd-modules-load.service
 Before=sysinit.target
 
+# These dependencies are used to make certain that the module is fully
+# loaded. Indeed udev starts this unit when it receives an uevent for the
+# module but the kernel sends it too early, ie before the init() of the module
+# is fully operational and /sys/fs/fuse/connections is created, see issue#17586.
+
+After=modprobe@fuse.service
+Requires=modprobe@fuse.service
+
 [Mount]
 What=fusectl
 Where=/sys/fs/fuse/connections
index 001c7b57cce5ccd7225dd61e8db1dfbcdbd6acf0..7d965046ee5ee29083003a2e30920fc087651648 100644 (file)
@@ -12,11 +12,17 @@ Description=Kernel Configuration File System
 Documentation=https://www.kernel.org/doc/Documentation/filesystems/configfs/configfs.txt
 Documentation=https://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
 DefaultDependencies=no
-ConditionPathExists=/sys/kernel/config
 ConditionCapability=CAP_SYS_RAWIO
-After=systemd-modules-load.service
 Before=sysinit.target
 
+# These dependencies are used to make certain that the module is fully
+# loaded. Indeed udev starts this unit when it receives an uevent for the
+# module but the kernel sends it too early, ie before the init() of the module
+# is fully operational and /sys/kernel/config is created, see issue#17586.
+
+After=modprobe@configfs.service
+Requires=modprobe@configfs.service
+
 [Mount]
 What=configfs
 Where=/sys/kernel/config