summaryrefslogtreecommitdiff
path: root/src/core/automount.c
diff options
context:
space:
mode:
authorDaan De Meyer <daan.j.demeyer@gmail.com>2021-10-18 14:17:02 +0200
committerDaan De Meyer <daan.j.demeyer@gmail.com>2021-11-03 20:25:14 +0000
commit12ab94a1e4961a39c32efb60b71866ab588d3ea2 (patch)
tree4d4a316d5e2ec0dbccbc54a6c38a604f980718dc /src/core/automount.c
parent7454acd73f4197600ca440a74583aba804d9af30 (diff)
downloadsystemd-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.c16
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);