X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Ffsck.c;h=19ca75311ba50dbbfe20cadf81bbd12538e89f59;hp=5574c0a9c01ec502a7f000082d81ae794963fcfa;hb=03aea2aecd6f9d2193af5d6cf866063da8d47ad5;hpb=0f6aaf1bddaed6a0393fc445af60ee19fa73fabf diff --git a/src/fsck.c b/src/fsck.c index 5574c0a9c..19ca75311 100644 --- a/src/fsck.c +++ b/src/fsck.c @@ -57,7 +57,7 @@ static void start_target(const char *target, bool isolate) { else mode = "replace"; - log_debug("Running request %s/start/%s", target, mode); + log_info("Running request %s/start/%s", target, mode); if (!(m = dbus_message_new_method_call("org.freedesktop.systemd1", "/org/freedesktop/systemd1", "org.freedesktop.systemd1.Manager", "StartUnitReplace"))) { log_error("Could not allocate message."); @@ -106,6 +106,9 @@ static int parse_proc_cmdline(void) { int r; size_t l; + if (detect_container(NULL) > 0) + return 0; + if ((r = read_one_line_file("/proc/cmdline", &line)) < 0) { log_warning("Failed to read /proc/cmdline, ignoring: %s", strerror(-r)); return 0; @@ -121,7 +124,7 @@ static int parse_proc_cmdline(void) { arg_skip = true; else if (startswith(w, "fsck.mode")) log_warning("Invalid fsck.mode= parameter. Ignoring."); -#ifdef TARGET_FEDORA +#if defined(TARGET_FEDORA) || defined(TARGET_MANDRIVA) else if (strneq(w, "fastboot", l)) arg_skip = true; else if (strneq(w, "forcefsck", l)) @@ -142,7 +145,7 @@ static void test_files(void) { } int main(int argc, char *argv[]) { - const char *cmdline[7]; + const char *cmdline[8]; int i = 0, r = EXIT_FAILURE, q; pid_t pid; siginfo_t status; @@ -188,7 +191,7 @@ int main(int argc, char *argv[]) { times[0] = st.st_atim; times[1] = st.st_mtim; if (utimensat(AT_FDCWD, "/", times, 0) == 0) { - log_error("Root directory is writable, skip check."); + log_info("Root directory is writable, skipping check."); return 0; } @@ -213,6 +216,7 @@ int main(int argc, char *argv[]) { cmdline[i++] = "/sbin/fsck"; cmdline[i++] = "-a"; cmdline[i++] = "-T"; + cmdline[i++] = "-l"; if (!root_directory) cmdline[i++] = "-M"; @@ -246,18 +250,22 @@ int main(int argc, char *argv[]) { else log_error("fsck failed due to unknown reason."); - if (status.si_code == CLD_EXITED && status.si_status & 2) + if (status.si_code == CLD_EXITED && (status.si_status & 2) && root_directory) /* System should be rebooted. */ start_target(SPECIAL_REBOOT_TARGET, false); - else + else if (status.si_code == CLD_EXITED && (status.si_status & 6)) /* Some other problem */ start_target(SPECIAL_EMERGENCY_TARGET, true); + else { + r = EXIT_SUCCESS; + log_warning("Ignoring error."); + } } else r = EXIT_SUCCESS; if (status.si_code == CLD_EXITED && (status.si_status & 1)) - touch("/dev/.systemd/quotacheck"); + touch("/run/systemd/quotacheck"); finish: if (udev_device)