From 3035a7c577dbacbe2c0c50a732fef274b1abbeb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 26 May 2020 15:06:53 +0200 Subject: [PATCH 1/5] core: update comment about sysv compat We don't want people to consider that part deprecated. Follow-up for 6589a56972. --- src/core/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/main.c b/src/core/main.c index 30e1b3d19d..5dda164fef 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -517,7 +517,7 @@ static int parse_proc_cmdline_item(const char *key, const char *value, void *dat } else if (!value) { const char *target; - /* SysV compatibility */ + /* Compatible with SysV, but supported independently even if SysV compatiblity is disabled. */ target = runlevel_to_target(key); if (target) return free_and_strdup_warn(&arg_default_unit, target); From 1414090854829003c0d234042b218a3bd6f1cb0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 26 May 2020 16:07:30 +0200 Subject: [PATCH 2/5] core: add forgotten return in error path If we get an error here, this is most likely oom, and we should not continue. --- src/core/load-fragment.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c index 352798fd6a..6b97cf4797 100644 --- a/src/core/load-fragment.c +++ b/src/core/load-fragment.c @@ -4782,7 +4782,7 @@ int unit_load_fragment(Unit *u) { &u->manager->unit_name_map, &u->manager->unit_path_cache); if (r < 0) - log_error_errno(r, "Failed to rebuild name map: %m"); + return log_error_errno(r, "Failed to rebuild name map: %m"); r = unit_file_find_fragment(u->manager->unit_id_map, u->manager->unit_name_map, From 40fd0a77c64735cc8a6f09b93174fd923ef9b6a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 26 May 2020 18:55:23 +0200 Subject: [PATCH 3/5] userwork: remove trailing comma in message --- src/userdb/userwork.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/userdb/userwork.c b/src/userdb/userwork.c index 5a8fc81922..ac04af0ca8 100644 --- a/src/userdb/userwork.c +++ b/src/userdb/userwork.c @@ -724,7 +724,7 @@ static int run(int argc, char *argv[]) { last_busy_usec = n; else if (listen_idle_usec != USEC_INFINITY && n >= usec_add(last_busy_usec, listen_idle_usec)) { char buf[FORMAT_TIMESPAN_MAX]; - log_debug("Exiting worker, been idle for %s, .", + log_debug("Exiting worker, been idle for %s.", format_timespan(buf, sizeof(buf), usec_sub_unsigned(n, last_busy_usec), 0)); break; } From 24b4597064f18880e773780f59ad04d55ec70e62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 26 May 2020 19:28:53 +0200 Subject: [PATCH 4/5] core: minor simplification --- src/core/manager.c | 27 +++++++-------------------- 1 file changed, 7 insertions(+), 20 deletions(-) diff --git a/src/core/manager.c b/src/core/manager.c index ac5a3b6805..f15f845e81 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -679,18 +679,12 @@ static int manager_setup_prefix(Manager *m) { [EXEC_DIRECTORY_CONFIGURATION] = { SD_PATH_USER_CONFIGURATION, NULL }, }; - const struct table_entry *p; - ExecDirectoryType i; - int r; - assert(m); - if (MANAGER_IS_SYSTEM(m)) - p = paths_system; - else - p = paths_user; + const struct table_entry *p = MANAGER_IS_SYSTEM(m) ? paths_system : paths_user; + int r; - for (i = 0; i < _EXEC_DIRECTORY_TYPE_MAX; i++) { + for (ExecDirectoryType i = 0; i < _EXEC_DIRECTORY_TYPE_MAX; i++) { r = sd_path_lookup(p[i].type, p[i].suffix, &m->prefix[i]); if (r < 0) return r; @@ -1344,15 +1338,12 @@ static void manager_clear_jobs_and_units(Manager *m) { } Manager* manager_free(Manager *m) { - ExecDirectoryType dt; - UnitType c; - if (!m) return NULL; manager_clear_jobs_and_units(m); - for (c = 0; c < _UNIT_TYPE_MAX; c++) + for (UnitType c = 0; c < _UNIT_TYPE_MAX; c++) if (unit_vtable[c]->shutdown) unit_vtable[c]->shutdown(m); @@ -1423,22 +1414,20 @@ Manager* manager_free(Manager *m) { hashmap_free(m->uid_refs); hashmap_free(m->gid_refs); - for (dt = 0; dt < _EXEC_DIRECTORY_TYPE_MAX; dt++) + for (ExecDirectoryType dt = 0; dt < _EXEC_DIRECTORY_TYPE_MAX; dt++) m->prefix[dt] = mfree(m->prefix[dt]); return mfree(m); } static void manager_enumerate_perpetual(Manager *m) { - UnitType c; - assert(m); if (m->test_run_flags == MANAGER_TEST_RUN_MINIMAL) return; /* Let's ask every type to load all units from disk/kernel that it might know */ - for (c = 0; c < _UNIT_TYPE_MAX; c++) { + for (UnitType c = 0; c < _UNIT_TYPE_MAX; c++) { if (!unit_type_supported(c)) { log_debug("Unit type .%s is not supported on this system.", unit_type_to_string(c)); continue; @@ -1450,15 +1439,13 @@ static void manager_enumerate_perpetual(Manager *m) { } static void manager_enumerate(Manager *m) { - UnitType c; - assert(m); if (m->test_run_flags == MANAGER_TEST_RUN_MINIMAL) return; /* Let's ask every type to load all units from disk/kernel that it might know */ - for (c = 0; c < _UNIT_TYPE_MAX; c++) { + for (UnitType c = 0; c < _UNIT_TYPE_MAX; c++) { if (!unit_type_supported(c)) { log_debug("Unit type .%s is not supported on this system.", unit_type_to_string(c)); continue; From dde5c821bf33c085fcefb791bcb541510bb0e992 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 26 May 2020 21:08:10 +0200 Subject: [PATCH 5/5] shared/efi-loader: remove check that uses absolute tick value sd-boot uses rdtsc to set those timestamps. There is no guarantee that the tsc has any particular absolute value. On my VM: $ head /sys/firmware/efi/efivars/LoaderTime* ==> /sys/firmware/efi/efivars/LoaderTimeExecUSec-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f <== 4397904074 ==> /sys/firmware/efi/efivars/LoaderTimeInitUSec-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f <== 4396386839 ==> /sys/firmware/efi/efivars/LoaderTimeMenuUSec-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f <== 4396392521 $ build/test-boot-timestamps ... LoaderTimeExecUSec=4396386839 too large, refusing. Failed to read EFI loader data: Input/output error Assertion 'q >= 0' failed at src/test/test-boot-timestamps.c:84, function main(). Aborting. (with patch) $ build/test-boot-timestamps ... EFI Loader: start=1h 13min 16.386s exit=1h 13min 17.904s duration=1.517s Firmware began 1h 13min 17.904074s before kernel. Loader began 1.517235s before kernel. Firmware began Tue 2020-05-26 11:04:13 CEST. Loader began Tue 2020-05-26 12:17:30 CEST. Kernel began Tue 2020-05-26 12:17:31 CEST. --- src/shared/efi-loader.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/shared/efi-loader.c b/src/shared/efi-loader.c index 34196537b7..c288176fd1 100644 --- a/src/shared/efi-loader.c +++ b/src/shared/efi-loader.c @@ -531,15 +531,11 @@ int efi_loader_get_boot_usec(usec_t *firmware, usec_t *loader) { if (r < 0) return log_debug_errno(r, "Failed to read LoaderTimeExecUSec: %m"); - if (y == 0 || y < x) + if (y == 0 || y < x || y - x > USEC_PER_HOUR) return log_debug_errno(SYNTHETIC_ERRNO(EIO), "Bad LoaderTimeInitUSec=%"PRIu64", LoaderTimeExecUSec=%" PRIu64"; refusing.", x, y); - if (y > USEC_PER_HOUR) - return log_debug_errno(SYNTHETIC_ERRNO(EIO), - "LoaderTimeExecUSec=%"PRIu64" too large, refusing.", x); - *firmware = x; *loader = y;