From 8610788332cb6492d8e5275b32200db4138401bb Mon Sep 17 00:00:00 2001 From: Tom Gundersen Date: Sat, 19 Oct 2013 11:38:42 +0200 Subject: [PATCH] fsck-root: only run when requested in fstab fsck-root is redundant in case an initrd is used, or in case the rootfs is never remounted 'rw', so the new default is the correct behavior for most users. For the rest, they should enable it in fstab. --- Makefile.am | 1 - man/systemd-fsck@.service.xml | 4 +++- src/fstab-generator/fstab-generator.c | 31 ++++++++++++++++++++++--------- 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/Makefile.am b/Makefile.am index df63275..fa2fba6 100644 --- a/Makefile.am +++ b/Makefile.am @@ -4415,7 +4415,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 17bd1c0..811392b 100644 --- a/man/systemd-fsck@.service.xml +++ b/man/systemd-fsck@.service.xml @@ -63,7 +63,9 @@ check. systemd-fsck-root.service is responsible for file system checks on the root file system. The root file system check is performed - before the other file systems. + before the other file systems. Either service is enabled + at boot if passno in /etc/fstab for + the filesystem is set to a value greater than zero. systemd-fsck 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 7874ff1..c0c2992 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();