[systemd-devel] [PATCH] core/main.c: handle the initrd timestamp differently, if in the initrd
harald at redhat.com
harald at redhat.com
Wed May 16 05:22:44 PDT 2012
From: Harald Hoyer <harald at redhat.com>
If systemd is in the initrd/initramfs, set the initrd timestamp and do
not try to read it from the RD_TIMESTAMP environment variable.
---
src/core/main.c | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
diff --git a/src/core/main.c b/src/core/main.c
index 9084463..a816015 100644
--- a/src/core/main.c
+++ b/src/core/main.c
@@ -1310,6 +1310,19 @@ int main(int argc, char *argv[]) {
log_set_max_level(LOG_INFO);
if (getpid() == 1) {
+ if (in_initrd()) {
+ char *rd_timestamp = NULL;
+
+ dual_timestamp_get(&initrd_timestamp);
+ asprintf(&rd_timestamp, "%llu %llu",
+ (unsigned long long) initrd_timestamp.realtime,
+ (unsigned long long) initrd_timestamp.monotonic);
+ if (rd_timestamp) {
+ setenv("RD_TIMESTAMP", rd_timestamp, 1);
+ free(rd_timestamp);
+ }
+ }
+
arg_running_as = MANAGER_SYSTEM;
log_set_target(detect_container(NULL) > 0 ? LOG_TARGET_JOURNAL : LOG_TARGET_JOURNAL_OR_KMSG);
@@ -1437,7 +1450,8 @@ int main(int argc, char *argv[]) {
/* Parse the data passed to us. We leave this
* variables set, but the manager later on will not
* pass them on to our children. */
- parse_initrd_timestamp(&initrd_timestamp);
+ if(!in_initrd())
+ parse_initrd_timestamp(&initrd_timestamp);
/* Unset some environment variables passed in from the
* kernel that don't really make sense for us. */
--
1.7.10.1
More information about the systemd-devel
mailing list