X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fcore%2Fshutdown.c;h=def20f50228657f3dbdc107e8cfa8a948e1e12f2;hb=a2c0e528b8b5ba370527db279605e4e4135689c1;hp=121998ff5c403ff675ca429ea43ebe13910bd378;hpb=4104970ef78e40e976215cdb0d1b9170a213cc4b;p=elogind.git diff --git a/src/core/shutdown.c b/src/core/shutdown.c index 121998ff5..def20f502 100644 --- a/src/core/shutdown.c +++ b/src/core/shutdown.c @@ -138,15 +138,11 @@ static int parse_argv(int argc, char *argv[]) { } static int switch_root_initramfs(void) { - if (mount("/run/initramfs", "/run/initramfs", NULL, MS_BIND, NULL) < 0) { - log_error("Failed to mount bind /run/initramfs on /run/initramfs: %m"); - return -errno; - } + if (mount("/run/initramfs", "/run/initramfs", NULL, MS_BIND, NULL) < 0) + return log_error_errno(errno, "Failed to mount bind /run/initramfs on /run/initramfs: %m"); - if (mount(NULL, "/run/initramfs", NULL, MS_PRIVATE, NULL) < 0) { - log_error("Failed to make /run/initramfs private mount: %m"); - return -errno; - } + if (mount(NULL, "/run/initramfs", NULL, MS_PRIVATE, NULL) < 0) + return log_error_errno(errno, "Failed to make /run/initramfs private mount: %m"); /* switch_root with MS_BIND, because there might still be processes lurking around, which have open file desriptors. * /run/initramfs/shutdown will take care of these. @@ -240,7 +236,7 @@ int main(int argc, char *argv[]) { } else if (r > 0) log_info("Not all file systems unmounted, %d left.", r); else - log_error("Failed to unmount file systems: %s", strerror(-r)); + log_error_errno(r, "Failed to unmount file systems: %m"); } if (need_swapoff) { @@ -252,7 +248,7 @@ int main(int argc, char *argv[]) { } else if (r > 0) log_info("Not all swaps deactivated, %d left.", r); else - log_error("Failed to deactivate swaps: %s", strerror(-r)); + log_error_errno(r, "Failed to deactivate swaps: %m"); } if (need_loop_detach) { @@ -264,7 +260,7 @@ int main(int argc, char *argv[]) { } else if (r > 0) log_info("Not all loop devices detached, %d left.", r); else - log_error("Failed to detach loop devices: %s", strerror(-r)); + log_error_errno(r, "Failed to detach loop devices: %m"); } if (need_dm_detach) { @@ -276,7 +272,7 @@ int main(int argc, char *argv[]) { } else if (r > 0) log_info("Not all DM devices detached, %d left.", r); else - log_error("Failed to detach DM devices: %s", strerror(-r)); + log_error_errno(r, "Failed to detach DM devices: %m"); } if (!need_umount && !need_swapoff && !need_loop_detach && !need_dm_detach) { @@ -327,9 +323,9 @@ int main(int argc, char *argv[]) { "Returning to initrd..."); execv("/shutdown", argv); - log_error("Failed to execute shutdown binary: %m"); + log_error_errno(errno, "Failed to execute shutdown binary: %m"); } else - log_error("Failed to switch root to \"/run/initramfs\": %s", strerror(-r)); + log_error_errno(r, "Failed to switch root to \"/run/initramfs\": %m"); } @@ -359,7 +355,7 @@ int main(int argc, char *argv[]) { pid = fork(); if (pid < 0) - log_error("Failed to fork: %m"); + log_error_errno(errno, "Failed to fork: %m"); else if (pid == 0) { const char * const args[] = { @@ -371,7 +367,7 @@ int main(int argc, char *argv[]) { execv(args[0], (char * const *) args); _exit(EXIT_FAILURE); } else - wait_for_terminate_and_warn("kexec", pid); + wait_for_terminate_and_warn("kexec", pid, true); } cmd = RB_AUTOBOOT; @@ -412,11 +408,11 @@ int main(int argc, char *argv[]) { exit(0); } - log_error("Failed to invoke reboot(): %m"); + log_error_errno(errno, "Failed to invoke reboot(): %m"); r = -errno; error: - log_emergency("Critical error while doing system shutdown: %s", strerror(-r)); + log_emergency_errno(r, "Critical error while doing system shutdown: %m"); freeze(); }