diff options
author | Daan De Meyer <daan.j.demeyer@gmail.com> | 2021-10-18 14:17:02 +0200 |
---|---|---|
committer | Daan De Meyer <daan.j.demeyer@gmail.com> | 2021-11-03 20:25:14 +0000 |
commit | 12ab94a1e4961a39c32efb60b71866ab588d3ea2 (patch) | |
tree | 4d4a316d5e2ec0dbccbc54a6c38a604f980718dc /src/core/automount.c | |
parent | 7454acd73f4197600ca440a74583aba804d9af30 (diff) | |
download | systemd-12ab94a1e4961a39c32efb60b71866ab588d3ea2.tar.gz |
core: Propagate condition failed state to triggering units.
Alternative to https://github.com/systemd/systemd/pull/20531.
Whenever a service triggered by another unit fails condition checks,
stop the triggering unit to prevent systemd busy looping trying to
start the triggered unit.
Diffstat (limited to 'src/core/automount.c')
-rw-r--r-- | src/core/automount.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/core/automount.c b/src/core/automount.c index 5a004f82d5..de470935c7 100644 --- a/src/core/automount.c +++ b/src/core/automount.c @@ -786,6 +786,11 @@ static void automount_enter_running(Automount *a) { goto fail; } + if (unit_has_failed_condition_or_assert(trigger)) { + automount_enter_dead(a, AUTOMOUNT_FAILURE_MOUNT_CONDITION_FAILED); + return; + } + r = manager_add_job(UNIT(a)->manager, JOB_START, trigger, JOB_REPLACE, NULL, &error, NULL); if (r < 0) { log_unit_warning(UNIT(a), "Failed to queue mount startup job: %s", bus_error_message(&error, r)); @@ -1074,11 +1079,12 @@ static int automount_test_start_limit(Unit *u) { } static const char* const automount_result_table[_AUTOMOUNT_RESULT_MAX] = { - [AUTOMOUNT_SUCCESS] = "success", - [AUTOMOUNT_FAILURE_RESOURCES] = "resources", - [AUTOMOUNT_FAILURE_START_LIMIT_HIT] = "start-limit-hit", - [AUTOMOUNT_FAILURE_MOUNT_START_LIMIT_HIT] = "mount-start-limit-hit", - [AUTOMOUNT_FAILURE_UNMOUNTED] = "unmounted", + [AUTOMOUNT_SUCCESS] = "success", + [AUTOMOUNT_FAILURE_RESOURCES] = "resources", + [AUTOMOUNT_FAILURE_START_LIMIT_HIT] = "start-limit-hit", + [AUTOMOUNT_FAILURE_MOUNT_START_LIMIT_HIT] = "mount-start-limit-hit", + [AUTOMOUNT_FAILURE_UNMOUNTED] = "unmounted", + [AUTOMOUNT_FAILURE_MOUNT_CONDITION_FAILED] = "mount-condition-failed", }; DEFINE_STRING_TABLE_LOOKUP(automount_result, AutomountResult); |