summaryrefslogtreecommitdiff
path: root/core/systemd/0007-fsck-root-only-run-when-requested-in-fstab.patch
blob: 112b5b59ada69867861a3d6fdfe5644339a13170 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
From a7623afb7a48ab1d7b5b24fbd5f1033acfb2301c Mon Sep 17 00:00:00 2001
From: Tom Gundersen <teg@jklm.no>
Date: Sat, 19 Oct 2013 11:38:42 +0200
Subject: [PATCH 7/7] 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 ca01179..a29a32a 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 17bd1c0..811392b 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 77247de..78d7609 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();
-- 
1.8.5.1