115 lines
4.7 KiB
Diff
115 lines
4.7 KiB
Diff
|
From cae7f26accc90031b04c6cedae10b54a6c854c87 Mon Sep 17 00:00:00 2001
|
||
|
From: Lennart Poettering <lennart@poettering.net>
|
||
|
Date: Fri, 31 Oct 2014 16:22:36 +0100
|
||
|
Subject: [PATCH] units: don't order journal flushing afte remote-fs.target
|
||
|
|
||
|
Instead, only depend on the actual file systems we need.
|
||
|
|
||
|
This should solve dep loops on setups where remote-fs.target is moved
|
||
|
into late boot.
|
||
|
|
||
|
(cherry picked from commit 919699ec301ea507edce4a619141ed22e789ac0d)
|
||
|
---
|
||
|
src/nspawn/nspawn.c | 38 ++++++++++++++--------------------
|
||
|
units/systemd-journal-flush.service.in | 3 ++-
|
||
|
2 files changed, 18 insertions(+), 23 deletions(-)
|
||
|
|
||
|
diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
|
||
|
index 7e96efd425..f332ade03e 100644
|
||
|
--- a/src/nspawn/nspawn.c
|
||
|
+++ b/src/nspawn/nspawn.c
|
||
|
@@ -2911,8 +2911,8 @@ static int change_uid_gid(char **_home) {
|
||
|
* container argument.
|
||
|
* > 0 : The program executed in the container terminated with an
|
||
|
* error. The exit code of the program executed in the
|
||
|
- * container is returned. No change is made to the container
|
||
|
- * argument.
|
||
|
+ * container is returned. The container argument has been set
|
||
|
+ * to CONTAINER_TERMINATED.
|
||
|
* 0 : The container is being rebooted, has been shut down or exited
|
||
|
* successfully. The container argument has been set to either
|
||
|
* CONTAINER_TERMINATED or CONTAINER_REBOOTED.
|
||
|
@@ -2921,8 +2921,8 @@ static int change_uid_gid(char **_home) {
|
||
|
* error is indicated by a non-zero value.
|
||
|
*/
|
||
|
static int wait_for_container(pid_t pid, ContainerStatus *container) {
|
||
|
- int r;
|
||
|
siginfo_t status;
|
||
|
+ int r;
|
||
|
|
||
|
r = wait_for_terminate(pid, &status);
|
||
|
if (r < 0) {
|
||
|
@@ -2933,44 +2933,38 @@ static int wait_for_container(pid_t pid, ContainerStatus *container) {
|
||
|
switch (status.si_code) {
|
||
|
|
||
|
case CLD_EXITED:
|
||
|
- r = status.si_status;
|
||
|
- if (r == 0) {
|
||
|
- if (!arg_quiet)
|
||
|
- log_debug("Container %s exited successfully.", arg_machine);
|
||
|
+ if (status.si_status == 0) {
|
||
|
+ log_full(arg_quiet ? LOG_DEBUG : LOG_INFO, "Container %s exited successfully.", arg_machine);
|
||
|
|
||
|
- *container = CONTAINER_TERMINATED;
|
||
|
} else
|
||
|
- log_error("Container %s failed with error code %i.", arg_machine, status.si_status);
|
||
|
+ log_full(arg_quiet ? LOG_DEBUG : LOG_INFO, "Container %s failed with error code %i.", arg_machine, status.si_status);
|
||
|
|
||
|
- break;
|
||
|
+ *container = CONTAINER_TERMINATED;
|
||
|
+ return status.si_status;
|
||
|
|
||
|
case CLD_KILLED:
|
||
|
if (status.si_status == SIGINT) {
|
||
|
- if (!arg_quiet)
|
||
|
- log_info("Container %s has been shut down.", arg_machine);
|
||
|
|
||
|
+ log_full(arg_quiet ? LOG_DEBUG : LOG_INFO, "Container %s has been shut down.", arg_machine);
|
||
|
*container = CONTAINER_TERMINATED;
|
||
|
- r = 0;
|
||
|
- break;
|
||
|
+ return 0;
|
||
|
+
|
||
|
} else if (status.si_status == SIGHUP) {
|
||
|
- if (!arg_quiet)
|
||
|
- log_info("Container %s is being rebooted.", arg_machine);
|
||
|
|
||
|
+ log_full(arg_quiet ? LOG_DEBUG : LOG_INFO, "Container %s is being rebooted.", arg_machine);
|
||
|
*container = CONTAINER_REBOOTED;
|
||
|
- r = 0;
|
||
|
- break;
|
||
|
+ return 0;
|
||
|
}
|
||
|
+
|
||
|
/* CLD_KILLED fallthrough */
|
||
|
|
||
|
case CLD_DUMPED:
|
||
|
log_error("Container %s terminated by signal %s.", arg_machine, signal_to_string(status.si_status));
|
||
|
- r = -EIO;
|
||
|
- break;
|
||
|
+ return -EIO;
|
||
|
|
||
|
default:
|
||
|
log_error("Container %s failed due to unknown reason.", arg_machine);
|
||
|
- r = -EIO;
|
||
|
- break;
|
||
|
+ return -EIO;
|
||
|
}
|
||
|
|
||
|
return r;
|
||
|
diff --git a/units/systemd-journal-flush.service.in b/units/systemd-journal-flush.service.in
|
||
|
index 699670bb4e..2612220e2e 100644
|
||
|
--- a/units/systemd-journal-flush.service.in
|
||
|
+++ b/units/systemd-journal-flush.service.in
|
||
|
@@ -10,8 +10,9 @@ Description=Trigger Flushing of Journal to Persistent Storage
|
||
|
Documentation=man:systemd-journald.service(8) man:journald.conf(5)
|
||
|
DefaultDependencies=no
|
||
|
Requires=systemd-journald.service
|
||
|
-After=systemd-journald.service local-fs.target remote-fs.target
|
||
|
+After=systemd-journald.service
|
||
|
Before=systemd-user-sessions.service systemd-tmpfiles-setup.service
|
||
|
+RequiresMountsFor=/var/log/journal
|
||
|
|
||
|
[Service]
|
||
|
ExecStart=@rootbindir@/journalctl --flush
|