X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Ffstab-generator%2Ffstab-generator.c;h=96b090614944228afbe4cea1d7efe77a12d66ae9;hb=eb9da376d76b48585b3b63b4f91903b54f7abd36;hp=77247dee5e786bab7a68cd9cbfe264d926cb0d0b;hpb=64e70e4b86d3f732d3513189312f6220d1d5cfbc;p=elogind.git diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c index 77247dee5..96b090614 100644 --- a/src/fstab-generator/fstab-generator.c +++ b/src/fstab-generator/fstab-generator.c @@ -32,7 +32,6 @@ #include "mount-setup.h" #include "special.h" #include "mkdir.h" -#include "virt.h" #include "fileio.h" static const char *arg_dest = "/tmp"; @@ -210,17 +209,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 +259,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(); @@ -382,16 +394,16 @@ static int parse_fstab(const char *prefix, bool initrd) { static int parse_new_root_from_proc_cmdline(void) { _cleanup_free_ char *what = NULL, *type = NULL, *opts = NULL, *line = NULL; + bool noauto, nofail; char *w, *state; - int r; size_t l; - bool noauto, nofail; + int r; - r = read_one_line_file("/proc/cmdline", &line); - if (r < 0) { - log_error("Failed to read /proc/cmdline, ignoring: %s", strerror(-r)); + r = proc_cmdline(&line); + if (r < 0) + log_warning("Failed to read /proc/cmdline, ignoring: %s", strerror(-r)); + if (r <= 0) return 0; - } opts = strdup("ro"); type = strdup("auto"); @@ -464,17 +476,14 @@ static int parse_new_root_from_proc_cmdline(void) { static int parse_proc_cmdline(void) { _cleanup_free_ char *line = NULL; char *w, *state; - int r; size_t l; + int r; - if (detect_container(NULL) > 0) - return 0; - - r = read_one_line_file("/proc/cmdline", &line); - if (r < 0) { + r = proc_cmdline(&line); + if (r < 0) log_warning("Failed to read /proc/cmdline, ignoring: %s", strerror(-r)); + if (r <= 0) return 0; - } FOREACH_WORD_QUOTED(w, l, line, state) { _cleanup_free_ char *word = NULL;