]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
core: do not serialize timestamps that are re-measured on soft-reboot
authorLuca Boccassi <bluca@debian.org>
Tue, 26 Mar 2024 22:28:58 +0000 (22:28 +0000)
committerLuca Boccassi <bluca@debian.org>
Wed, 27 Mar 2024 01:25:49 +0000 (01:25 +0000)
Otherwise the de-serialization overwrites the timestamps taken after
soft-reboot (e.g.: userspace start/finish) and sd-analyze shows bogus
data

src/core/manager-serialize.c

index 0d91faee6f214610880096ada7ce6db9063d9333..3af6723e5f640a8c860980053e22b61415e3fb79 100644 (file)
@@ -23,11 +23,12 @@ int manager_open_serialization(Manager *m, FILE **ret_f) {
         return open_serialization_file("systemd-state", ret_f);
 }
 
-static bool manager_timestamp_shall_serialize(ManagerTimestamp t) {
-        if (!in_initrd())
+static bool manager_timestamp_shall_serialize(ManagerObjective o, ManagerTimestamp t) {
+        if (!in_initrd() && o != MANAGER_SOFT_REBOOT)
                 return true;
 
-        /* The following timestamps only apply to the host system, hence only serialize them there */
+        /* The following timestamps only apply to the host system (or first boot in case of soft-reboot),
+         * hence only serialize them there. */
         return !IN_SET(t,
                        MANAGER_TIMESTAMP_USERSPACE, MANAGER_TIMESTAMP_FINISH,
                        MANAGER_TIMESTAMP_SECURITY_START, MANAGER_TIMESTAMP_SECURITY_FINISH,
@@ -111,7 +112,7 @@ int manager_serialize(
         for (ManagerTimestamp q = 0; q < _MANAGER_TIMESTAMP_MAX; q++) {
                 _cleanup_free_ char *joined = NULL;
 
-                if (!manager_timestamp_shall_serialize(q))
+                if (!manager_timestamp_shall_serialize(m->objective, q))
                         continue;
 
                 joined = strjoin(manager_timestamp_to_string(q), "-timestamp");