summaryrefslogtreecommitdiff
path: root/units
diff options
context:
space:
mode:
authorFranck Bui <fbui@suse.com>2020-11-19 09:17:19 +0100
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2020-12-08 18:08:31 +0100
commite30dee26662a56db355e0f74389313f943a824ac (patch)
tree8cdf5479f8f55f76a06af6f7dca2f6f05e2aba40 /units
parent24a04f9125050b2fb298ba914aabf21dc97d52eb (diff)
downloadsystemd-e30dee26662a56db355e0f74389313f943a824ac.tar.gz
units: wait until some fs modules are entirely loaded before mounting their corresponding filesystem
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. (cherry picked from commit 42cc2855ba2fe4c6f5dc863507a1c843611350a0)
Diffstat (limited to 'units')
-rw-r--r--units/sys-fs-fuse-connections.mount10
-rw-r--r--units/sys-kernel-config.mount10
2 files changed, 16 insertions, 4 deletions
diff --git a/units/sys-fs-fuse-connections.mount b/units/sys-fs-fuse-connections.mount
index 7bbc342be8..096807b982 100644
--- a/units/sys-fs-fuse-connections.mount
+++ b/units/sys-fs-fuse-connections.mount
@@ -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
diff --git a/units/sys-kernel-config.mount b/units/sys-kernel-config.mount
index e6997884dc..d9151a7dfd 100644
--- a/units/sys-kernel-config.mount
+++ b/units/sys-kernel-config.mount
@@ -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