File 0001-upstream-systemctl-halt-reboot-error-handling.patch of Package systemd-208

--- systemd-208/src/core/shutdown.c
+++ systemd-208/src/core/shutdown.c	2014-01-27 11:31:38.486235816 +0000
@@ -329,6 +329,9 @@ int main(int argc, char *argv[]) {
 
         reboot(cmd);
 
+        if (cmd == RB_POWER_OFF)
+                reboot(RB_HALT_SYSTEM);
+
         if (errno == EPERM && in_container) {
                 /* If we are in a container, and we lacked
                  * CAP_SYS_BOOT just exit, this will kill our

--- systemd-208/src/systemctl/systemctl.c
+++ systemd-208/src/systemctl/systemctl.c	2014-01-27 11:05:18.298236035 +0000
@@ -138,7 +138,7 @@ static bool arg_plain = false;
 static bool private_bus = false;
 
 static int daemon_reload(DBusConnection *bus, char **args);
-static void halt_now(enum action a);
+static int halt_now(enum action a);
 
 static void pager_open_if_enabled(void) {
 
@@ -2227,7 +2227,7 @@ static int start_special(DBusConnection
             (a == ACTION_HALT ||
              a == ACTION_POWEROFF ||
              a == ACTION_REBOOT))
-                halt_now(a);
+                return halt_now(a);
 
         if (arg_force >= 1 &&
             (a == ACTION_HALT ||
@@ -5973,7 +5973,7 @@ done:
         return 0;
 }
 
-static _noreturn_ void halt_now(enum action a) {
+static int halt_now(enum action a) {
 
        /* Make sure C-A-D is handled by the kernel from this
          * point on... */
@@ -5984,23 +5984,22 @@ static _noreturn_ void halt_now(enum act
         case ACTION_HALT:
                 log_info("Halting.");
                 reboot(RB_HALT_SYSTEM);
-                break;
+                return -errno;
 
         case ACTION_POWEROFF:
                 log_info("Powering off.");
                 reboot(RB_POWER_OFF);
-                break;
+                return -errno;
 
         case ACTION_REBOOT:
                 log_info("Rebooting.");
                 reboot(RB_AUTOBOOT);
-                break;
+                return -errno;
 
         default:
-                assert_not_reached("Unknown halt action.");
+                assert_not_reached("Unknown action.");
+                return -ENOSYS;
         }
-
-        assert_not_reached("Uh? This shouldn't happen.");
 }
 
 static int halt_main(DBusConnection *bus) {
@@ -6069,9 +6068,10 @@ static int halt_main(DBusConnection *bus
         if (arg_dry)
                 return 0;
 
-        halt_now(arg_action);
-        /* We should never reach this. */
-        return -ENOSYS;
+        r = halt_now(arg_action);
+        log_error("Failed to reboot: %s", strerror(-r));
+
+        return r;
 }
 
 static int runlevel_main(void) {
openSUSE Build Service is sponsored by