From: Zbigniew Jędrzejewski-Szmek Date: Tue, 23 Jun 2026 16:31:42 +0000 (+0200) Subject: core: rename and extend manager_add_job_by_name_and_warn X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2e4ef3dca530695bf0f099542add31f2ff5fcc90;p=thirdparty%2Fsystemd.git core: rename and extend manager_add_job_by_name_and_warn The "and" in the name was a misnomer. We do one *or* the other. So rename 's/_and_/_or_/', and extend with the ability to load a second unit. No functional change. --- diff --git a/src/core/emergency-action.c b/src/core/emergency-action.c index b9a5c66ebff..181da27f7a3 100644 --- a/src/core/emergency-action.c +++ b/src/core/emergency-action.c @@ -113,7 +113,7 @@ void emergency_action( log_and_status(m, action, flags, "Rebooting", reason); (void) update_reboot_parameter_and_warn(reboot_arg, true); - (void) manager_add_job_by_name_and_warn(m, JOB_START, SPECIAL_REBOOT_TARGET, JOB_REPLACE_IRREVERSIBLY, NULL, NULL); + (void) manager_add_job_by_name_or_warn(m, JOB_START, SPECIAL_REBOOT_TARGET, JOB_REPLACE_IRREVERSIBLY, NULL, NULL); break; case EMERGENCY_ACTION_REBOOT_FORCE: @@ -141,7 +141,7 @@ void emergency_action( case EMERGENCY_ACTION_SOFT_REBOOT: log_and_status(m, action, flags, "Soft-rebooting", reason); - (void) manager_add_job_by_name_and_warn(m, JOB_START, SPECIAL_SOFT_REBOOT_TARGET, JOB_REPLACE_IRREVERSIBLY, NULL, NULL); + (void) manager_add_job_by_name_or_warn(m, JOB_START, SPECIAL_SOFT_REBOOT_TARGET, JOB_REPLACE_IRREVERSIBLY, NULL, NULL); break; case EMERGENCY_ACTION_SOFT_REBOOT_FORCE: @@ -157,7 +157,7 @@ void emergency_action( if (MANAGER_IS_USER(m) || detect_container() > 0) { log_and_status(m, action, flags, "Exiting", reason); - (void) manager_add_job_by_name_and_warn(m, JOB_START, SPECIAL_EXIT_TARGET, JOB_REPLACE_IRREVERSIBLY, NULL, NULL); + (void) manager_add_job_by_name_or_warn(m, JOB_START, SPECIAL_EXIT_TARGET, JOB_REPLACE_IRREVERSIBLY, NULL, NULL); break; } @@ -166,7 +166,7 @@ void emergency_action( case EMERGENCY_ACTION_POWEROFF: log_and_status(m, action, flags, "Powering off", reason); - (void) manager_add_job_by_name_and_warn(m, JOB_START, SPECIAL_POWEROFF_TARGET, JOB_REPLACE_IRREVERSIBLY, NULL, NULL); + (void) manager_add_job_by_name_or_warn(m, JOB_START, SPECIAL_POWEROFF_TARGET, JOB_REPLACE_IRREVERSIBLY, NULL, NULL); break; case EMERGENCY_ACTION_EXIT_FORCE: @@ -199,7 +199,7 @@ void emergency_action( case EMERGENCY_ACTION_KEXEC: log_and_status(m, action, flags, "Executing kexec", reason); - (void) manager_add_job_by_name_and_warn(m, JOB_START, SPECIAL_KEXEC_TARGET, JOB_REPLACE_IRREVERSIBLY, NULL, NULL); + (void) manager_add_job_by_name_or_warn(m, JOB_START, SPECIAL_KEXEC_TARGET, JOB_REPLACE_IRREVERSIBLY, NULL, NULL); break; case EMERGENCY_ACTION_KEXEC_FORCE: @@ -209,7 +209,7 @@ void emergency_action( case EMERGENCY_ACTION_HALT: log_and_status(m, action, flags, "Halting", reason); - (void) manager_add_job_by_name_and_warn(m, JOB_START, SPECIAL_HALT_TARGET, JOB_REPLACE_IRREVERSIBLY, NULL, NULL); + (void) manager_add_job_by_name_or_warn(m, JOB_START, SPECIAL_HALT_TARGET, JOB_REPLACE_IRREVERSIBLY, NULL, NULL); break; case EMERGENCY_ACTION_HALT_FORCE: diff --git a/src/core/manager.c b/src/core/manager.c index baaac37482a..2e0ac49d984 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -2527,22 +2527,36 @@ int manager_add_job_by_name(Manager *m, JobType type, const char *name, JobMode return manager_add_job_full(m, type, unit, mode, /* extra_flags= */ 0, affected_jobs, e, ret); } -int manager_add_job_by_name_and_warn(Manager *m, JobType type, const char *name, JobMode mode, Set *affected_jobs, Job **ret) { +static int manager_add_job_by_name_or_warn_with_fallback( + Manager *m, + JobType type, + const char *name, + const char *fallback, + JobMode mode, + Set *affected_jobs, + Job **ret) { + _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL; int r; - assert(m); - assert(type < _JOB_TYPE_MAX); - assert(name); - assert(mode < _JOB_MODE_MAX); - r = manager_add_job_by_name(m, type, name, mode, affected_jobs, &error, ret); + if (r == -ENOENT && fallback) { + log_debug_errno(r, "Failed to enqueue job %s/%s, fallback to %s: %s", + name, job_mode_to_string(mode), fallback, bus_error_message(&error, r)); + sd_bus_error_free(&error); + name = fallback; + r = manager_add_job_by_name(m, type, name, mode, affected_jobs, &error, ret); + } if (r < 0) - return log_warning_errno(r, "Failed to enqueue %s job for %s: %s", job_mode_to_string(mode), name, bus_error_message(&error, r)); - + return log_warning_errno(r, "Failed to enqueue job %s/%s: %s", + name, job_mode_to_string(mode), bus_error_message(&error, r)); return r; } +int manager_add_job_by_name_or_warn(Manager *m, JobType type, const char *name, JobMode mode, Set *affected_jobs, Job **ret) { + return manager_add_job_by_name_or_warn_with_fallback(m, type, name, /* fallback= */ NULL, mode, affected_jobs, ret); +} + int manager_propagate_reload(Manager *m, Unit *unit, JobMode mode, sd_bus_error *e) { _cleanup_(transaction_abort_and_freep) Transaction *tr = NULL; int r; @@ -3209,7 +3223,7 @@ turn_off: static void manager_start_special(Manager *m, const char *name, JobMode mode) { Job *job; - if (manager_add_job_by_name_and_warn(m, JOB_START, name, mode, NULL, &job) < 0) + if (manager_add_job_by_name_or_warn(m, JOB_START, name, mode, NULL, &job) < 0) return; const char *s = unit_status_string(job->unit, NULL); diff --git a/src/core/manager.h b/src/core/manager.h index ab5187cde4c..8262bfbec85 100644 --- a/src/core/manager.h +++ b/src/core/manager.h @@ -624,7 +624,7 @@ int manager_add_job( Job **ret); int manager_add_job_by_name(Manager *m, JobType type, const char *name, JobMode mode, Set *affected_jobs, sd_bus_error *e, Job **ret); -int manager_add_job_by_name_and_warn(Manager *m, JobType type, const char *name, JobMode mode, Set *affected_jobs, Job **ret); +int manager_add_job_by_name_or_warn(Manager *m, JobType type, const char *name, JobMode mode, Set *affected_jobs, Job **ret); int manager_propagate_reload(Manager *m, Unit *unit, JobMode mode, sd_bus_error *e); void manager_clear_jobs(Manager *m);