summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDr. Tilmann Bubeck <t.bubeck@reinform.de>2012-05-04 10:32:47 +0200
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2013-04-01 23:43:48 -0400
commit80cfe9e163b1c92f917e0a5e053b148fca790677 (patch)
tree357b1daff0c40858c6f850e60f110093bf1538a6
parent9607d9470eec07df817e58f64d312ccb5ac4cfcc (diff)
Do no isolate in case of emergency or severe problems
This patch changes local-fs.target and systemd-fsck to not use "isolate" when going into emergency. This fixes https://bugzilla.redhat.com/show_bug.cgi?id=810722 The motivation is, that when something wents wrong, we should keep everything as it is, to let the user fix the problem. When isolating we stop a lot of services and therefore change the system heavily so that it gets harder for the user to fix. An example is a crypted partition. When the fsck in a crypted partition fails, it previously used "emergency/start/isolate" which stops cryptsetup. Therefore if the user tries to fsck e.g. /dev/mapper/luks-356c20ae-c7a2-4f1c-ae1d-1d290a91b691 as printed by the failing fsck, then it will not find this device (because it got closed). So please apply this patch to let the user see the failing situation. Thanks! [zj: removed dead isolate param from start_target().] https://bugs.freedesktop.org/show_bug.cgi?id=49463 https://bugzilla.redhat.com/show_bug.cgi?id=810722
-rw-r--r--src/fsck/fsck.c13
-rw-r--r--units/local-fs.target2
2 files changed, 5 insertions, 10 deletions
diff --git a/src/fsck/fsck.c b/src/fsck/fsck.c
index f692b3a8d3..f298cf7b9a 100644
--- a/src/fsck/fsck.c
+++ b/src/fsck/fsck.c
@@ -41,10 +41,10 @@ static bool arg_skip = false;
static bool arg_force = false;
static bool arg_show_progress = false;
-static void start_target(const char *target, bool isolate) {
+static void start_target(const char *target) {
DBusMessage *m = NULL, *reply = NULL;
DBusError error;
- const char *mode, *basic_target = "basic.target";
+ const char *mode = "replace", *basic_target = "basic.target";
DBusConnection *bus = NULL;
assert(target);
@@ -56,11 +56,6 @@ static void start_target(const char *target, bool isolate) {
goto finish;
}
- if (isolate)
- mode = "isolate";
- else
- mode = "replace";
-
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"))) {
@@ -389,10 +384,10 @@ int main(int argc, char *argv[]) {
if (status.si_code == CLD_EXITED && (status.si_status & 2) && root_directory)
/* System should be rebooted. */
- start_target(SPECIAL_REBOOT_TARGET, false);
+ start_target(SPECIAL_REBOOT_TARGET);
else if (status.si_code == CLD_EXITED && (status.si_status & 6))
/* Some other problem */
- start_target(SPECIAL_EMERGENCY_TARGET, true);
+ start_target(SPECIAL_EMERGENCY_TARGET);
else {
r = EXIT_SUCCESS;
log_warning("Ignoring error.");
diff --git a/units/local-fs.target b/units/local-fs.target
index ee02e4e988..18c3d74f18 100644
--- a/units/local-fs.target
+++ b/units/local-fs.target
@@ -10,4 +10,4 @@ Description=Local File Systems
Documentation=man:systemd.special(7)
After=local-fs-pre.target
OnFailure=emergency.target
-OnFailureIsolate=yes
+OnFailureIsolate=no