summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.am1
-rw-r--r--man/systemd-fsck@.service.xml4
-rw-r--r--src/fstab-generator/fstab-generator.c31
3 files changed, 25 insertions, 11 deletions
diff --git a/Makefile.am b/Makefile.am
index ca01179e82..a29a32a5d2 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -4447,7 +4447,6 @@ SYSINIT_TARGET_WANTS += \
systemd-update-utmp.service
LOCAL_FS_TARGET_WANTS += \
systemd-remount-fs.service \
- systemd-fsck-root.service \
tmp.mount
MULTI_USER_TARGET_WANTS += \
getty.target \
diff --git a/man/systemd-fsck@.service.xml b/man/systemd-fsck@.service.xml
index 17bd1c027b..811392b19a 100644
--- a/man/systemd-fsck@.service.xml
+++ b/man/systemd-fsck@.service.xml
@@ -63,7 +63,9 @@
check. <filename>systemd-fsck-root.service</filename> is
responsible for file system checks on the root
file system. The root file system check is performed
- before the other file systems.</para>
+ before the other file systems. Either service is enabled
+ at boot if passno in <filename>/etc/fstab</filename> for
+ the filesystem is set to a value greater than zero.</para>
<para><filename>systemd-fsck</filename> will
forward file system checking progress to the
diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c
index 77247dee5e..78d7609c6c 100644
--- a/src/fstab-generator/fstab-generator.c
+++ b/src/fstab-generator/fstab-generator.c
@@ -210,17 +210,29 @@ static int add_mount(
post);
if (passno > 0) {
- _cleanup_free_ char *fsck = NULL;
+ if (streq(where, "/")) {
+ lnk = strjoin(arg_dest, "/", SPECIAL_LOCAL_FS_TARGET, ".wants/", "systemd-fsck-root.service", NULL);
+ if (!lnk)
+ return log_oom();
- fsck = unit_name_from_path_instance("systemd-fsck", what, ".service");
- if (!fsck)
- return log_oom();
+ mkdir_parents_label(lnk, 0755);
+ if (symlink("systemd-fsck-root.service", lnk) < 0) {
+ log_error("Failed to create symlink %s: %m", lnk);
+ return -errno;
+ }
+ } else {
+ _cleanup_free_ char *fsck = NULL;
- fprintf(f,
- "Requires=%s\n"
- "After=%s\n",
- fsck,
- fsck);
+ fsck = unit_name_from_path_instance("systemd-fsck", what, ".service");
+ if (!fsck)
+ return log_oom();
+
+ fprintf(f,
+ "Requires=%s\n"
+ "After=%s\n",
+ fsck,
+ fsck);
+ }
}
@@ -248,6 +260,7 @@ static int add_mount(
if (!noauto) {
if (post) {
+ free(lnk);
lnk = strjoin(arg_dest, "/", post, nofail || automount ? ".wants/" : ".requires/", name, NULL);
if (!lnk)
return log_oom();