1 /*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
4 This file is part of systemd.
6 Copyright 2010 Lennart Poettering
8 systemd is free software; you can redistribute it and/or modify it
9 under the terms of the GNU Lesser General Public License as published by
10 the Free Software Foundation; either version 2.1 of the License, or
11 (at your option) any later version.
13 systemd is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Lesser General Public License for more details.
18 You should have received a copy of the GNU Lesser General Public License
19 along with systemd; If not, see <http://www.gnu.org/licenses/>.
29 #include "sd-messages.h"
31 #include "bus-common-errors.h"
33 #include "cgroup-util.h"
34 #include "dbus-unit.h"
39 #include "fileio-label.h"
40 #include "formats-util.h"
41 #include "load-dropin.h"
42 #include "load-fragment.h"
47 #include "path-util.h"
48 #include "process-util.h"
51 #include "string-util.h"
53 #include "unit-name.h"
57 const UnitVTable
* const unit_vtable
[_UNIT_TYPE_MAX
] = {
58 [UNIT_SERVICE
] = &service_vtable
,
59 [UNIT_SOCKET
] = &socket_vtable
,
60 [UNIT_BUSNAME
] = &busname_vtable
,
61 [UNIT_TARGET
] = &target_vtable
,
62 [UNIT_SNAPSHOT
] = &snapshot_vtable
,
63 [UNIT_DEVICE
] = &device_vtable
,
64 [UNIT_MOUNT
] = &mount_vtable
,
65 [UNIT_AUTOMOUNT
] = &automount_vtable
,
66 [UNIT_SWAP
] = &swap_vtable
,
67 [UNIT_TIMER
] = &timer_vtable
,
68 [UNIT_PATH
] = &path_vtable
,
69 [UNIT_SLICE
] = &slice_vtable
,
70 [UNIT_SCOPE
] = &scope_vtable
73 static void maybe_warn_about_dependency(Unit
*u
, const char *other
, UnitDependency dependency
);
75 Unit
*unit_new(Manager
*m
, size_t size
) {
79 assert(size
>= sizeof(Unit
));
85 u
->names
= set_new(&string_hash_ops
);
92 u
->type
= _UNIT_TYPE_INVALID
;
93 u
->default_dependencies
= true;
94 u
->unit_file_state
= _UNIT_FILE_STATE_INVALID
;
95 u
->unit_file_preset
= -1;
96 u
->on_failure_job_mode
= JOB_REPLACE
;
97 u
->cgroup_inotify_wd
= -1;
99 RATELIMIT_INIT(u
->auto_stop_ratelimit
, 10 * USEC_PER_SEC
, 16);
104 bool unit_has_name(Unit
*u
, const char *name
) {
108 return !!set_get(u
->names
, (char*) name
);
111 static void unit_init(Unit
*u
) {
118 assert(u
->type
>= 0);
120 cc
= unit_get_cgroup_context(u
);
122 cgroup_context_init(cc
);
124 /* Copy in the manager defaults into the cgroup
125 * context, _before_ the rest of the settings have
126 * been initialized */
128 cc
->cpu_accounting
= u
->manager
->default_cpu_accounting
;
129 cc
->blockio_accounting
= u
->manager
->default_blockio_accounting
;
130 cc
->memory_accounting
= u
->manager
->default_memory_accounting
;
131 cc
->tasks_accounting
= u
->manager
->default_tasks_accounting
;
134 ec
= unit_get_exec_context(u
);
136 exec_context_init(ec
);
138 kc
= unit_get_kill_context(u
);
140 kill_context_init(kc
);
142 if (UNIT_VTABLE(u
)->init
)
143 UNIT_VTABLE(u
)->init(u
);
146 int unit_add_name(Unit
*u
, const char *text
) {
147 _cleanup_free_
char *s
= NULL
, *i
= NULL
;
154 if (unit_name_is_valid(text
, UNIT_NAME_TEMPLATE
)) {
159 r
= unit_name_replace_instance(text
, u
->instance
, &s
);
168 if (set_contains(u
->names
, s
))
170 if (hashmap_contains(u
->manager
->units
, s
))
173 if (!unit_name_is_valid(s
, UNIT_NAME_PLAIN
|UNIT_NAME_INSTANCE
))
176 t
= unit_name_to_type(s
);
180 if (u
->type
!= _UNIT_TYPE_INVALID
&& t
!= u
->type
)
183 r
= unit_name_to_instance(s
, &i
);
187 if (i
&& unit_vtable
[t
]->no_instances
)
190 /* Ensure that this unit is either instanced or not instanced,
191 * but not both. Note that we do allow names with different
192 * instance names however! */
193 if (u
->type
!= _UNIT_TYPE_INVALID
&& !u
->instance
!= !i
)
196 if (unit_vtable
[t
]->no_alias
&& !set_isempty(u
->names
))
199 if (hashmap_size(u
->manager
->units
) >= MANAGER_MAX_NAMES
)
202 r
= set_put(u
->names
, s
);
207 r
= hashmap_put(u
->manager
->units
, s
, u
);
209 (void) set_remove(u
->names
, s
);
213 if (u
->type
== _UNIT_TYPE_INVALID
) {
218 LIST_PREPEND(units_by_type
, u
->manager
->units_by_type
[t
], u
);
227 unit_add_to_dbus_queue(u
);
231 int unit_choose_id(Unit
*u
, const char *name
) {
232 _cleanup_free_
char *t
= NULL
;
239 if (unit_name_is_valid(name
, UNIT_NAME_TEMPLATE
)) {
244 r
= unit_name_replace_instance(name
, u
->instance
, &t
);
251 /* Selects one of the names of this unit as the id */
252 s
= set_get(u
->names
, (char*) name
);
256 /* Determine the new instance from the new id */
257 r
= unit_name_to_instance(s
, &i
);
266 unit_add_to_dbus_queue(u
);
271 int unit_set_description(Unit
*u
, const char *description
) {
276 if (isempty(description
))
279 s
= strdup(description
);
284 free(u
->description
);
287 unit_add_to_dbus_queue(u
);
291 bool unit_check_gc(Unit
*u
) {
292 UnitActiveState state
;
301 state
= unit_active_state(u
);
303 /* If the unit is inactive and failed and no job is queued for
304 * it, then release its runtime resources */
305 if (UNIT_IS_INACTIVE_OR_FAILED(state
) &&
306 UNIT_VTABLE(u
)->release_resources
)
307 UNIT_VTABLE(u
)->release_resources(u
);
309 /* But we keep the unit object around for longer when it is
310 * referenced or configured to not be gc'ed */
311 if (state
!= UNIT_INACTIVE
)
314 if (UNIT_VTABLE(u
)->no_gc
)
323 if (UNIT_VTABLE(u
)->check_gc
)
324 if (UNIT_VTABLE(u
)->check_gc(u
))
330 void unit_add_to_load_queue(Unit
*u
) {
332 assert(u
->type
!= _UNIT_TYPE_INVALID
);
334 if (u
->load_state
!= UNIT_STUB
|| u
->in_load_queue
)
337 LIST_PREPEND(load_queue
, u
->manager
->load_queue
, u
);
338 u
->in_load_queue
= true;
341 void unit_add_to_cleanup_queue(Unit
*u
) {
344 if (u
->in_cleanup_queue
)
347 LIST_PREPEND(cleanup_queue
, u
->manager
->cleanup_queue
, u
);
348 u
->in_cleanup_queue
= true;
351 void unit_add_to_gc_queue(Unit
*u
) {
354 if (u
->in_gc_queue
|| u
->in_cleanup_queue
)
357 if (unit_check_gc(u
))
360 LIST_PREPEND(gc_queue
, u
->manager
->gc_queue
, u
);
361 u
->in_gc_queue
= true;
363 u
->manager
->n_in_gc_queue
++;
366 void unit_add_to_dbus_queue(Unit
*u
) {
368 assert(u
->type
!= _UNIT_TYPE_INVALID
);
370 if (u
->load_state
== UNIT_STUB
|| u
->in_dbus_queue
)
373 /* Shortcut things if nobody cares */
374 if (sd_bus_track_count(u
->manager
->subscribed
) <= 0 &&
375 set_isempty(u
->manager
->private_buses
)) {
376 u
->sent_dbus_new_signal
= true;
380 LIST_PREPEND(dbus_queue
, u
->manager
->dbus_unit_queue
, u
);
381 u
->in_dbus_queue
= true;
384 static void bidi_set_free(Unit
*u
, Set
*s
) {
390 /* Frees the set and makes sure we are dropped from the
391 * inverse pointers */
393 SET_FOREACH(other
, s
, i
) {
396 for (d
= 0; d
< _UNIT_DEPENDENCY_MAX
; d
++)
397 set_remove(other
->dependencies
[d
], u
);
399 unit_add_to_gc_queue(other
);
405 static void unit_remove_transient(Unit
*u
) {
413 if (u
->fragment_path
)
414 (void) unlink(u
->fragment_path
);
416 STRV_FOREACH(i
, u
->dropin_paths
) {
417 _cleanup_free_
char *p
= NULL
;
422 r
= path_get_parent(*i
, &p
);
428 static void unit_free_requires_mounts_for(Unit
*u
) {
431 STRV_FOREACH(j
, u
->requires_mounts_for
) {
432 char s
[strlen(*j
) + 1];
434 PATH_FOREACH_PREFIX_MORE(s
, *j
) {
438 x
= hashmap_get2(u
->manager
->units_requiring_mounts_for
, s
, (void**) &y
);
444 if (set_isempty(x
)) {
445 hashmap_remove(u
->manager
->units_requiring_mounts_for
, y
);
452 u
->requires_mounts_for
= strv_free(u
->requires_mounts_for
);
455 static void unit_done(Unit
*u
) {
465 if (UNIT_VTABLE(u
)->done
)
466 UNIT_VTABLE(u
)->done(u
);
468 ec
= unit_get_exec_context(u
);
470 exec_context_done(ec
);
472 cc
= unit_get_cgroup_context(u
);
474 cgroup_context_done(cc
);
476 r
= unit_remove_from_netclass_cgroup(u
);
478 log_warning_errno(r
, "Unable to remove unit from netclass group: %m");
481 void unit_free(Unit
*u
) {
488 if (u
->manager
->n_reloading
<= 0)
489 unit_remove_transient(u
);
491 bus_unit_send_removed_signal(u
);
495 sd_bus_slot_unref(u
->match_bus_slot
);
497 unit_free_requires_mounts_for(u
);
499 SET_FOREACH(t
, u
->names
, i
)
500 hashmap_remove_value(u
->manager
->units
, t
, u
);
514 for (d
= 0; d
< _UNIT_DEPENDENCY_MAX
; d
++)
515 bidi_set_free(u
, u
->dependencies
[d
]);
517 if (u
->type
!= _UNIT_TYPE_INVALID
)
518 LIST_REMOVE(units_by_type
, u
->manager
->units_by_type
[u
->type
], u
);
520 if (u
->in_load_queue
)
521 LIST_REMOVE(load_queue
, u
->manager
->load_queue
, u
);
523 if (u
->in_dbus_queue
)
524 LIST_REMOVE(dbus_queue
, u
->manager
->dbus_unit_queue
, u
);
526 if (u
->in_cleanup_queue
)
527 LIST_REMOVE(cleanup_queue
, u
->manager
->cleanup_queue
, u
);
529 if (u
->in_gc_queue
) {
530 LIST_REMOVE(gc_queue
, u
->manager
->gc_queue
, u
);
531 u
->manager
->n_in_gc_queue
--;
534 if (u
->in_cgroup_queue
)
535 LIST_REMOVE(cgroup_queue
, u
->manager
->cgroup_queue
, u
);
537 unit_release_cgroup(u
);
539 (void) manager_update_failed_units(u
->manager
, u
, false);
540 set_remove(u
->manager
->startup_units
, u
);
542 free(u
->description
);
543 strv_free(u
->documentation
);
544 free(u
->fragment_path
);
545 free(u
->source_path
);
546 strv_free(u
->dropin_paths
);
549 free(u
->job_timeout_reboot_arg
);
551 set_free_free(u
->names
);
553 unit_unwatch_all_pids(u
);
555 condition_free_list(u
->conditions
);
556 condition_free_list(u
->asserts
);
558 unit_ref_unset(&u
->slice
);
561 unit_ref_unset(u
->refs
);
566 UnitActiveState
unit_active_state(Unit
*u
) {
569 if (u
->load_state
== UNIT_MERGED
)
570 return unit_active_state(unit_follow_merge(u
));
572 /* After a reload it might happen that a unit is not correctly
573 * loaded but still has a process around. That's why we won't
574 * shortcut failed loading to UNIT_INACTIVE_FAILED. */
576 return UNIT_VTABLE(u
)->active_state(u
);
579 const char* unit_sub_state_to_string(Unit
*u
) {
582 return UNIT_VTABLE(u
)->sub_state_to_string(u
);
585 static int complete_move(Set
**s
, Set
**other
) {
595 r
= set_move(*s
, *other
);
606 static int merge_names(Unit
*u
, Unit
*other
) {
614 r
= complete_move(&u
->names
, &other
->names
);
618 set_free_free(other
->names
);
622 SET_FOREACH(t
, u
->names
, i
)
623 assert_se(hashmap_replace(u
->manager
->units
, t
, u
) == 0);
628 static int reserve_dependencies(Unit
*u
, Unit
*other
, UnitDependency d
) {
633 assert(d
< _UNIT_DEPENDENCY_MAX
);
636 * If u does not have this dependency set allocated, there is no need
637 * to reserve anything. In that case other's set will be transferred
638 * as a whole to u by complete_move().
640 if (!u
->dependencies
[d
])
643 /* merge_dependencies() will skip a u-on-u dependency */
644 n_reserve
= set_size(other
->dependencies
[d
]) - !!set_get(other
->dependencies
[d
], u
);
646 return set_reserve(u
->dependencies
[d
], n_reserve
);
649 static void merge_dependencies(Unit
*u
, Unit
*other
, const char *other_id
, UnitDependency d
) {
656 assert(d
< _UNIT_DEPENDENCY_MAX
);
658 /* Fix backwards pointers */
659 SET_FOREACH(back
, other
->dependencies
[d
], i
) {
662 for (k
= 0; k
< _UNIT_DEPENDENCY_MAX
; k
++) {
663 /* Do not add dependencies between u and itself */
665 if (set_remove(back
->dependencies
[k
], other
))
666 maybe_warn_about_dependency(u
, other_id
, k
);
668 r
= set_remove_and_put(back
->dependencies
[k
], other
, u
);
670 set_remove(back
->dependencies
[k
], other
);
672 assert(r
>= 0 || r
== -ENOENT
);
677 /* Also do not move dependencies on u to itself */
678 back
= set_remove(other
->dependencies
[d
], u
);
680 maybe_warn_about_dependency(u
, other_id
, d
);
682 /* The move cannot fail. The caller must have performed a reservation. */
683 assert_se(complete_move(&u
->dependencies
[d
], &other
->dependencies
[d
]) == 0);
685 other
->dependencies
[d
] = set_free(other
->dependencies
[d
]);
688 int unit_merge(Unit
*u
, Unit
*other
) {
690 const char *other_id
= NULL
;
695 assert(u
->manager
== other
->manager
);
696 assert(u
->type
!= _UNIT_TYPE_INVALID
);
698 other
= unit_follow_merge(other
);
703 if (u
->type
!= other
->type
)
706 if (!u
->instance
!= !other
->instance
)
709 if (other
->load_state
!= UNIT_STUB
&&
710 other
->load_state
!= UNIT_NOT_FOUND
)
719 if (!UNIT_IS_INACTIVE_OR_FAILED(unit_active_state(other
)))
723 other_id
= strdupa(other
->id
);
725 /* Make reservations to ensure merge_dependencies() won't fail */
726 for (d
= 0; d
< _UNIT_DEPENDENCY_MAX
; d
++) {
727 r
= reserve_dependencies(u
, other
, d
);
729 * We don't rollback reservations if we fail. We don't have
730 * a way to undo reservations. A reservation is not a leak.
737 r
= merge_names(u
, other
);
741 /* Redirect all references */
743 unit_ref_set(other
->refs
, u
);
745 /* Merge dependencies */
746 for (d
= 0; d
< _UNIT_DEPENDENCY_MAX
; d
++)
747 merge_dependencies(u
, other
, other_id
, d
);
749 other
->load_state
= UNIT_MERGED
;
750 other
->merged_into
= u
;
752 /* If there is still some data attached to the other node, we
753 * don't need it anymore, and can free it. */
754 if (other
->load_state
!= UNIT_STUB
)
755 if (UNIT_VTABLE(other
)->done
)
756 UNIT_VTABLE(other
)->done(other
);
758 unit_add_to_dbus_queue(u
);
759 unit_add_to_cleanup_queue(other
);
764 int unit_merge_by_name(Unit
*u
, const char *name
) {
767 _cleanup_free_
char *s
= NULL
;
772 if (unit_name_is_valid(name
, UNIT_NAME_TEMPLATE
)) {
776 r
= unit_name_replace_instance(name
, u
->instance
, &s
);
783 other
= manager_get_unit(u
->manager
, name
);
785 return unit_merge(u
, other
);
787 return unit_add_name(u
, name
);
790 Unit
* unit_follow_merge(Unit
*u
) {
793 while (u
->load_state
== UNIT_MERGED
)
794 assert_se(u
= u
->merged_into
);
799 int unit_add_exec_dependencies(Unit
*u
, ExecContext
*c
) {
805 if (c
->working_directory
) {
806 r
= unit_require_mounts_for(u
, c
->working_directory
);
811 if (c
->root_directory
) {
812 r
= unit_require_mounts_for(u
, c
->root_directory
);
817 if (u
->manager
->running_as
!= MANAGER_SYSTEM
)
820 if (c
->private_tmp
) {
821 r
= unit_require_mounts_for(u
, "/tmp");
825 r
= unit_require_mounts_for(u
, "/var/tmp");
830 if (c
->std_output
!= EXEC_OUTPUT_KMSG
&&
831 c
->std_output
!= EXEC_OUTPUT_SYSLOG
&&
832 c
->std_output
!= EXEC_OUTPUT_JOURNAL
&&
833 c
->std_output
!= EXEC_OUTPUT_KMSG_AND_CONSOLE
&&
834 c
->std_output
!= EXEC_OUTPUT_SYSLOG_AND_CONSOLE
&&
835 c
->std_output
!= EXEC_OUTPUT_JOURNAL_AND_CONSOLE
&&
836 c
->std_error
!= EXEC_OUTPUT_KMSG
&&
837 c
->std_error
!= EXEC_OUTPUT_SYSLOG
&&
838 c
->std_error
!= EXEC_OUTPUT_JOURNAL
&&
839 c
->std_error
!= EXEC_OUTPUT_KMSG_AND_CONSOLE
&&
840 c
->std_error
!= EXEC_OUTPUT_JOURNAL_AND_CONSOLE
&&
841 c
->std_error
!= EXEC_OUTPUT_SYSLOG_AND_CONSOLE
)
844 /* If syslog or kernel logging is requested, make sure our own
845 * logging daemon is run first. */
847 r
= unit_add_dependency_by_name(u
, UNIT_AFTER
, SPECIAL_JOURNALD_SOCKET
, NULL
, true);
854 const char *unit_description(Unit
*u
) {
858 return u
->description
;
863 void unit_dump(Unit
*u
, FILE *f
, const char *prefix
) {
869 timestamp1
[FORMAT_TIMESTAMP_MAX
],
870 timestamp2
[FORMAT_TIMESTAMP_MAX
],
871 timestamp3
[FORMAT_TIMESTAMP_MAX
],
872 timestamp4
[FORMAT_TIMESTAMP_MAX
],
873 timespan
[FORMAT_TIMESPAN_MAX
];
875 _cleanup_set_free_ Set
*following_set
= NULL
;
879 assert(u
->type
>= 0);
881 prefix
= strempty(prefix
);
882 prefix2
= strjoina(prefix
, "\t");
886 "%s\tDescription: %s\n"
888 "%s\tUnit Load State: %s\n"
889 "%s\tUnit Active State: %s\n"
890 "%s\tInactive Exit Timestamp: %s\n"
891 "%s\tActive Enter Timestamp: %s\n"
892 "%s\tActive Exit Timestamp: %s\n"
893 "%s\tInactive Enter Timestamp: %s\n"
894 "%s\tGC Check Good: %s\n"
895 "%s\tNeed Daemon Reload: %s\n"
896 "%s\tTransient: %s\n"
899 "%s\tCGroup realized: %s\n"
900 "%s\tCGroup mask: 0x%x\n"
901 "%s\tCGroup members mask: 0x%x\n",
903 prefix
, unit_description(u
),
904 prefix
, strna(u
->instance
),
905 prefix
, unit_load_state_to_string(u
->load_state
),
906 prefix
, unit_active_state_to_string(unit_active_state(u
)),
907 prefix
, strna(format_timestamp(timestamp1
, sizeof(timestamp1
), u
->inactive_exit_timestamp
.realtime
)),
908 prefix
, strna(format_timestamp(timestamp2
, sizeof(timestamp2
), u
->active_enter_timestamp
.realtime
)),
909 prefix
, strna(format_timestamp(timestamp3
, sizeof(timestamp3
), u
->active_exit_timestamp
.realtime
)),
910 prefix
, strna(format_timestamp(timestamp4
, sizeof(timestamp4
), u
->inactive_enter_timestamp
.realtime
)),
911 prefix
, yes_no(unit_check_gc(u
)),
912 prefix
, yes_no(unit_need_daemon_reload(u
)),
913 prefix
, yes_no(u
->transient
),
914 prefix
, strna(unit_slice_name(u
)),
915 prefix
, strna(u
->cgroup_path
),
916 prefix
, yes_no(u
->cgroup_realized
),
917 prefix
, u
->cgroup_realized_mask
,
918 prefix
, u
->cgroup_members_mask
);
920 SET_FOREACH(t
, u
->names
, i
)
921 fprintf(f
, "%s\tName: %s\n", prefix
, t
);
923 STRV_FOREACH(j
, u
->documentation
)
924 fprintf(f
, "%s\tDocumentation: %s\n", prefix
, *j
);
926 following
= unit_following(u
);
928 fprintf(f
, "%s\tFollowing: %s\n", prefix
, following
->id
);
930 r
= unit_following_set(u
, &following_set
);
934 SET_FOREACH(other
, following_set
, i
)
935 fprintf(f
, "%s\tFollowing Set Member: %s\n", prefix
, other
->id
);
938 if (u
->fragment_path
)
939 fprintf(f
, "%s\tFragment Path: %s\n", prefix
, u
->fragment_path
);
942 fprintf(f
, "%s\tSource Path: %s\n", prefix
, u
->source_path
);
944 STRV_FOREACH(j
, u
->dropin_paths
)
945 fprintf(f
, "%s\tDropIn Path: %s\n", prefix
, *j
);
947 if (u
->job_timeout
> 0)
948 fprintf(f
, "%s\tJob Timeout: %s\n", prefix
, format_timespan(timespan
, sizeof(timespan
), u
->job_timeout
, 0));
950 if (u
->job_timeout_action
!= FAILURE_ACTION_NONE
)
951 fprintf(f
, "%s\tJob Timeout Action: %s\n", prefix
, failure_action_to_string(u
->job_timeout_action
));
953 if (u
->job_timeout_reboot_arg
)
954 fprintf(f
, "%s\tJob Timeout Reboot Argument: %s\n", prefix
, u
->job_timeout_reboot_arg
);
956 condition_dump_list(u
->conditions
, f
, prefix
, condition_type_to_string
);
957 condition_dump_list(u
->asserts
, f
, prefix
, assert_type_to_string
);
959 if (dual_timestamp_is_set(&u
->condition_timestamp
))
961 "%s\tCondition Timestamp: %s\n"
962 "%s\tCondition Result: %s\n",
963 prefix
, strna(format_timestamp(timestamp1
, sizeof(timestamp1
), u
->condition_timestamp
.realtime
)),
964 prefix
, yes_no(u
->condition_result
));
966 if (dual_timestamp_is_set(&u
->assert_timestamp
))
968 "%s\tAssert Timestamp: %s\n"
969 "%s\tAssert Result: %s\n",
970 prefix
, strna(format_timestamp(timestamp1
, sizeof(timestamp1
), u
->assert_timestamp
.realtime
)),
971 prefix
, yes_no(u
->assert_result
));
973 for (d
= 0; d
< _UNIT_DEPENDENCY_MAX
; d
++) {
976 SET_FOREACH(other
, u
->dependencies
[d
], i
)
977 fprintf(f
, "%s\t%s: %s\n", prefix
, unit_dependency_to_string(d
), other
->id
);
980 if (!strv_isempty(u
->requires_mounts_for
)) {
982 "%s\tRequiresMountsFor:", prefix
);
984 STRV_FOREACH(j
, u
->requires_mounts_for
)
985 fprintf(f
, " %s", *j
);
990 if (u
->load_state
== UNIT_LOADED
) {
993 "%s\tStopWhenUnneeded: %s\n"
994 "%s\tRefuseManualStart: %s\n"
995 "%s\tRefuseManualStop: %s\n"
996 "%s\tDefaultDependencies: %s\n"
997 "%s\tOnFailureJobMode: %s\n"
998 "%s\tIgnoreOnIsolate: %s\n"
999 "%s\tIgnoreOnSnapshot: %s\n",
1000 prefix
, yes_no(u
->stop_when_unneeded
),
1001 prefix
, yes_no(u
->refuse_manual_start
),
1002 prefix
, yes_no(u
->refuse_manual_stop
),
1003 prefix
, yes_no(u
->default_dependencies
),
1004 prefix
, job_mode_to_string(u
->on_failure_job_mode
),
1005 prefix
, yes_no(u
->ignore_on_isolate
),
1006 prefix
, yes_no(u
->ignore_on_snapshot
));
1008 if (UNIT_VTABLE(u
)->dump
)
1009 UNIT_VTABLE(u
)->dump(u
, f
, prefix2
);
1011 } else if (u
->load_state
== UNIT_MERGED
)
1013 "%s\tMerged into: %s\n",
1014 prefix
, u
->merged_into
->id
);
1015 else if (u
->load_state
== UNIT_ERROR
)
1016 fprintf(f
, "%s\tLoad Error Code: %s\n", prefix
, strerror(-u
->load_error
));
1020 job_dump(u
->job
, f
, prefix2
);
1023 job_dump(u
->nop_job
, f
, prefix2
);
1027 /* Common implementation for multiple backends */
1028 int unit_load_fragment_and_dropin(Unit
*u
) {
1033 /* Load a .{service,socket,...} file */
1034 r
= unit_load_fragment(u
);
1038 if (u
->load_state
== UNIT_STUB
)
1041 /* Load drop-in directory data */
1042 r
= unit_load_dropin(unit_follow_merge(u
));
1049 /* Common implementation for multiple backends */
1050 int unit_load_fragment_and_dropin_optional(Unit
*u
) {
1055 /* Same as unit_load_fragment_and_dropin(), but whether
1056 * something can be loaded or not doesn't matter. */
1058 /* Load a .service file */
1059 r
= unit_load_fragment(u
);
1063 if (u
->load_state
== UNIT_STUB
)
1064 u
->load_state
= UNIT_LOADED
;
1066 /* Load drop-in directory data */
1067 r
= unit_load_dropin(unit_follow_merge(u
));
1074 int unit_add_default_target_dependency(Unit
*u
, Unit
*target
) {
1078 if (target
->type
!= UNIT_TARGET
)
1081 /* Only add the dependency if both units are loaded, so that
1082 * that loop check below is reliable */
1083 if (u
->load_state
!= UNIT_LOADED
||
1084 target
->load_state
!= UNIT_LOADED
)
1087 /* If either side wants no automatic dependencies, then let's
1089 if (!u
->default_dependencies
||
1090 !target
->default_dependencies
)
1093 /* Don't create loops */
1094 if (set_get(target
->dependencies
[UNIT_BEFORE
], u
))
1097 return unit_add_dependency(target
, UNIT_AFTER
, u
, true);
1100 static int unit_add_target_dependencies(Unit
*u
) {
1102 static const UnitDependency deps
[] = {
1104 UNIT_REQUIRED_BY_OVERRIDABLE
,
1106 UNIT_REQUISITE_OF_OVERRIDABLE
,
1118 for (k
= 0; k
< ELEMENTSOF(deps
); k
++)
1119 SET_FOREACH(target
, u
->dependencies
[deps
[k
]], i
) {
1120 r
= unit_add_default_target_dependency(u
, target
);
1128 static int unit_add_slice_dependencies(Unit
*u
) {
1131 if (!UNIT_HAS_CGROUP_CONTEXT(u
))
1134 if (UNIT_ISSET(u
->slice
))
1135 return unit_add_two_dependencies(u
, UNIT_AFTER
, UNIT_REQUIRES
, UNIT_DEREF(u
->slice
), true);
1137 if (unit_has_name(u
, SPECIAL_ROOT_SLICE
))
1140 return unit_add_two_dependencies_by_name(u
, UNIT_AFTER
, UNIT_REQUIRES
, SPECIAL_ROOT_SLICE
, NULL
, true);
1143 static int unit_add_mount_dependencies(Unit
*u
) {
1149 STRV_FOREACH(i
, u
->requires_mounts_for
) {
1150 char prefix
[strlen(*i
) + 1];
1152 PATH_FOREACH_PREFIX_MORE(prefix
, *i
) {
1153 _cleanup_free_
char *p
= NULL
;
1156 r
= unit_name_from_path(prefix
, ".mount", &p
);
1160 m
= manager_get_unit(u
->manager
, p
);
1162 /* Make sure to load the mount unit if
1163 * it exists. If so the dependencies
1164 * on this unit will be added later
1165 * during the loading of the mount
1167 (void) manager_load_unit_prepare(u
->manager
, p
, NULL
, NULL
, &m
);
1173 if (m
->load_state
!= UNIT_LOADED
)
1176 r
= unit_add_dependency(u
, UNIT_AFTER
, m
, true);
1180 if (m
->fragment_path
) {
1181 r
= unit_add_dependency(u
, UNIT_REQUIRES
, m
, true);
1191 static int unit_add_startup_units(Unit
*u
) {
1195 c
= unit_get_cgroup_context(u
);
1199 if (c
->startup_cpu_shares
== CGROUP_CPU_SHARES_INVALID
&&
1200 c
->startup_blockio_weight
== CGROUP_BLKIO_WEIGHT_INVALID
)
1203 r
= set_ensure_allocated(&u
->manager
->startup_units
, NULL
);
1207 return set_put(u
->manager
->startup_units
, u
);
1210 int unit_load(Unit
*u
) {
1215 if (u
->in_load_queue
) {
1216 LIST_REMOVE(load_queue
, u
->manager
->load_queue
, u
);
1217 u
->in_load_queue
= false;
1220 if (u
->type
== _UNIT_TYPE_INVALID
)
1223 if (u
->load_state
!= UNIT_STUB
)
1226 if (UNIT_VTABLE(u
)->load
) {
1227 r
= UNIT_VTABLE(u
)->load(u
);
1232 if (u
->load_state
== UNIT_STUB
) {
1237 if (u
->load_state
== UNIT_LOADED
) {
1239 r
= unit_add_target_dependencies(u
);
1243 r
= unit_add_slice_dependencies(u
);
1247 r
= unit_add_mount_dependencies(u
);
1251 r
= unit_add_startup_units(u
);
1255 if (u
->on_failure_job_mode
== JOB_ISOLATE
&& set_size(u
->dependencies
[UNIT_ON_FAILURE
]) > 1) {
1256 log_unit_error(u
, "More than one OnFailure= dependencies specified but OnFailureJobMode=isolate set. Refusing.");
1261 unit_update_cgroup_members_masks(u
);
1263 /* If we are reloading, we need to wait for the deserializer
1264 * to restore the net_cls ids that have been set previously */
1265 if (u
->manager
->n_reloading
<= 0) {
1266 r
= unit_add_to_netclass_cgroup(u
);
1272 assert((u
->load_state
!= UNIT_MERGED
) == !u
->merged_into
);
1274 unit_add_to_dbus_queue(unit_follow_merge(u
));
1275 unit_add_to_gc_queue(u
);
1280 u
->load_state
= u
->load_state
== UNIT_STUB
? UNIT_NOT_FOUND
: UNIT_ERROR
;
1282 unit_add_to_dbus_queue(u
);
1283 unit_add_to_gc_queue(u
);
1285 log_unit_debug_errno(u
, r
, "Failed to load configuration: %m");
1290 static bool unit_condition_test_list(Unit
*u
, Condition
*first
, const char *(*to_string
)(ConditionType t
)) {
1297 /* If the condition list is empty, then it is true */
1301 /* Otherwise, if all of the non-trigger conditions apply and
1302 * if any of the trigger conditions apply (unless there are
1303 * none) we return true */
1304 LIST_FOREACH(conditions
, c
, first
) {
1307 r
= condition_test(c
);
1310 "Couldn't determine result for %s=%s%s%s, assuming failed: %m",
1312 c
->trigger
? "|" : "",
1313 c
->negate
? "!" : "",
1319 c
->trigger
? "|" : "",
1320 c
->negate
? "!" : "",
1322 condition_result_to_string(c
->result
));
1324 if (!c
->trigger
&& r
<= 0)
1327 if (c
->trigger
&& triggered
<= 0)
1331 return triggered
!= 0;
1334 static bool unit_condition_test(Unit
*u
) {
1337 dual_timestamp_get(&u
->condition_timestamp
);
1338 u
->condition_result
= unit_condition_test_list(u
, u
->conditions
, condition_type_to_string
);
1340 return u
->condition_result
;
1343 static bool unit_assert_test(Unit
*u
) {
1346 dual_timestamp_get(&u
->assert_timestamp
);
1347 u
->assert_result
= unit_condition_test_list(u
, u
->asserts
, assert_type_to_string
);
1349 return u
->assert_result
;
1352 _pure_
static const char* unit_get_status_message_format(Unit
*u
, JobType t
) {
1354 const UnitStatusMessageFormats
*format_table
;
1357 assert(t
== JOB_START
|| t
== JOB_STOP
|| t
== JOB_RELOAD
);
1359 if (t
!= JOB_RELOAD
) {
1360 format_table
= &UNIT_VTABLE(u
)->status_message_formats
;
1362 format
= format_table
->starting_stopping
[t
== JOB_STOP
];
1368 /* Return generic strings */
1370 return "Starting %s.";
1371 else if (t
== JOB_STOP
)
1372 return "Stopping %s.";
1374 return "Reloading %s.";
1377 static void unit_status_print_starting_stopping(Unit
*u
, JobType t
) {
1382 format
= unit_get_status_message_format(u
, t
);
1384 DISABLE_WARNING_FORMAT_NONLITERAL
;
1385 unit_status_printf(u
, "", format
);
1389 static void unit_status_log_starting_stopping_reloading(Unit
*u
, JobType t
) {
1396 if (t
!= JOB_START
&& t
!= JOB_STOP
&& t
!= JOB_RELOAD
)
1399 if (log_on_console())
1402 /* We log status messages for all units and all operations. */
1404 format
= unit_get_status_message_format(u
, t
);
1406 DISABLE_WARNING_FORMAT_NONLITERAL
;
1407 snprintf(buf
, sizeof(buf
), format
, unit_description(u
));
1410 mid
= t
== JOB_START
? SD_MESSAGE_UNIT_STARTING
:
1411 t
== JOB_STOP
? SD_MESSAGE_UNIT_STOPPING
:
1412 SD_MESSAGE_UNIT_RELOADING
;
1414 /* Note that we deliberately use LOG_MESSAGE() instead of
1415 * LOG_UNIT_MESSAGE() here, since this is supposed to mimic
1416 * closely what is written to screen using the status output,
1417 * which is supposed the highest level, friendliest output
1418 * possible, which means we should avoid the low-level unit
1420 log_struct(LOG_INFO
,
1421 LOG_MESSAGE_ID(mid
),
1423 LOG_MESSAGE("%s", buf
),
1427 void unit_status_emit_starting_stopping_reloading(Unit
*u
, JobType t
) {
1429 unit_status_log_starting_stopping_reloading(u
, t
);
1431 /* Reload status messages have traditionally not been printed to console. */
1432 if (t
!= JOB_RELOAD
)
1433 unit_status_print_starting_stopping(u
, t
);
1437 * -EBADR: This unit type does not support starting.
1438 * -EALREADY: Unit is already started.
1439 * -EAGAIN: An operation is already in progress. Retry later.
1440 * -ECANCELED: Too many requests for now.
1441 * -EPROTO: Assert failed
1443 int unit_start(Unit
*u
) {
1444 UnitActiveState state
;
1449 /* Units that aren't loaded cannot be started */
1450 if (u
->load_state
!= UNIT_LOADED
)
1453 /* If this is already started, then this will succeed. Note
1454 * that this will even succeed if this unit is not startable
1455 * by the user. This is relied on to detect when we need to
1456 * wait for units and when waiting is finished. */
1457 state
= unit_active_state(u
);
1458 if (UNIT_IS_ACTIVE_OR_RELOADING(state
))
1461 /* If the conditions failed, don't do anything at all. If we
1462 * already are activating this call might still be useful to
1463 * speed up activation in case there is some hold-off time,
1464 * but we don't want to recheck the condition in that case. */
1465 if (state
!= UNIT_ACTIVATING
&&
1466 !unit_condition_test(u
)) {
1467 log_unit_debug(u
, "Starting requested but condition failed. Not starting unit.");
1471 /* If the asserts failed, fail the entire job */
1472 if (state
!= UNIT_ACTIVATING
&&
1473 !unit_assert_test(u
)) {
1474 log_unit_notice(u
, "Starting requested but asserts failed.");
1478 /* Units of types that aren't supported cannot be
1479 * started. Note that we do this test only after the condition
1480 * checks, so that we rather return condition check errors
1481 * (which are usually not considered a true failure) than "not
1482 * supported" errors (which are considered a failure).
1484 if (!unit_supported(u
))
1487 /* Forward to the main object, if we aren't it. */
1488 following
= unit_following(u
);
1490 log_unit_debug(u
, "Redirecting start request from %s to %s.", u
->id
, following
->id
);
1491 return unit_start(following
);
1494 /* If it is stopped, but we cannot start it, then fail */
1495 if (!UNIT_VTABLE(u
)->start
)
1498 /* We don't suppress calls to ->start() here when we are
1499 * already starting, to allow this request to be used as a
1500 * "hurry up" call, for example when the unit is in some "auto
1501 * restart" state where it waits for a holdoff timer to elapse
1502 * before it will start again. */
1504 unit_add_to_dbus_queue(u
);
1506 return UNIT_VTABLE(u
)->start(u
);
1509 bool unit_can_start(Unit
*u
) {
1512 if (u
->load_state
!= UNIT_LOADED
)
1515 if (!unit_supported(u
))
1518 return !!UNIT_VTABLE(u
)->start
;
1521 bool unit_can_isolate(Unit
*u
) {
1524 return unit_can_start(u
) &&
1529 * -EBADR: This unit type does not support stopping.
1530 * -EALREADY: Unit is already stopped.
1531 * -EAGAIN: An operation is already in progress. Retry later.
1533 int unit_stop(Unit
*u
) {
1534 UnitActiveState state
;
1539 state
= unit_active_state(u
);
1540 if (UNIT_IS_INACTIVE_OR_FAILED(state
))
1543 following
= unit_following(u
);
1545 log_unit_debug(u
, "Redirecting stop request from %s to %s.", u
->id
, following
->id
);
1546 return unit_stop(following
);
1549 if (!UNIT_VTABLE(u
)->stop
)
1552 unit_add_to_dbus_queue(u
);
1554 return UNIT_VTABLE(u
)->stop(u
);
1558 * -EBADR: This unit type does not support reloading.
1559 * -ENOEXEC: Unit is not started.
1560 * -EAGAIN: An operation is already in progress. Retry later.
1562 int unit_reload(Unit
*u
) {
1563 UnitActiveState state
;
1568 if (u
->load_state
!= UNIT_LOADED
)
1571 if (!unit_can_reload(u
))
1574 state
= unit_active_state(u
);
1575 if (state
== UNIT_RELOADING
)
1578 if (state
!= UNIT_ACTIVE
) {
1579 log_unit_warning(u
, "Unit cannot be reloaded because it is inactive.");
1583 following
= unit_following(u
);
1585 log_unit_debug(u
, "Redirecting reload request from %s to %s.", u
->id
, following
->id
);
1586 return unit_reload(following
);
1589 unit_add_to_dbus_queue(u
);
1591 return UNIT_VTABLE(u
)->reload(u
);
1594 bool unit_can_reload(Unit
*u
) {
1597 if (!UNIT_VTABLE(u
)->reload
)
1600 if (!UNIT_VTABLE(u
)->can_reload
)
1603 return UNIT_VTABLE(u
)->can_reload(u
);
1606 static void unit_check_unneeded(Unit
*u
) {
1608 static const UnitDependency needed_dependencies
[] = {
1610 UNIT_REQUIRED_BY_OVERRIDABLE
,
1612 UNIT_REQUISITE_OF_OVERRIDABLE
,
1624 /* If this service shall be shut down when unneeded then do
1627 if (!u
->stop_when_unneeded
)
1630 if (!UNIT_IS_ACTIVE_OR_ACTIVATING(unit_active_state(u
)))
1633 for (j
= 0; j
< ELEMENTSOF(needed_dependencies
); j
++)
1634 SET_FOREACH(other
, u
->dependencies
[needed_dependencies
[j
]], i
)
1635 if (unit_active_or_pending(other
))
1638 /* If stopping a unit fails continously we might enter a stop
1639 * loop here, hence stop acting on the service being
1640 * unnecessary after a while. */
1641 if (!ratelimit_test(&u
->auto_stop_ratelimit
)) {
1642 log_unit_warning(u
, "Unit not needed anymore, but not stopping since we tried this too often recently.");
1646 log_unit_info(u
, "Unit not needed anymore. Stopping.");
1648 /* Ok, nobody needs us anymore. Sniff. Then let's commit suicide */
1649 r
= manager_add_job(u
->manager
, JOB_STOP
, u
, JOB_FAIL
, true, NULL
, NULL
);
1651 log_unit_warning_errno(u
, r
, "Failed to enqueue stop job, ignoring: %m");
1654 static void unit_check_binds_to(Unit
*u
) {
1665 if (unit_active_state(u
) != UNIT_ACTIVE
)
1668 SET_FOREACH(other
, u
->dependencies
[UNIT_BINDS_TO
], i
) {
1672 if (!UNIT_IS_INACTIVE_OR_FAILED(unit_active_state(other
)))
1682 /* If stopping a unit fails continously we might enter a stop
1683 * loop here, hence stop acting on the service being
1684 * unnecessary after a while. */
1685 if (!ratelimit_test(&u
->auto_stop_ratelimit
)) {
1686 log_unit_warning(u
, "Unit is bound to inactive unit %s, but not stopping since we tried this too often recently.", other
->id
);
1691 log_unit_info(u
, "Unit is bound to inactive unit %s. Stopping, too.", other
->id
);
1693 /* A unit we need to run is gone. Sniff. Let's stop this. */
1694 r
= manager_add_job(u
->manager
, JOB_STOP
, u
, JOB_FAIL
, true, NULL
, NULL
);
1696 log_unit_warning_errno(u
, r
, "Failed to enqueue stop job, ignoring: %m");
1699 static void retroactively_start_dependencies(Unit
*u
) {
1704 assert(UNIT_IS_ACTIVE_OR_ACTIVATING(unit_active_state(u
)));
1706 SET_FOREACH(other
, u
->dependencies
[UNIT_REQUIRES
], i
)
1707 if (!set_get(u
->dependencies
[UNIT_AFTER
], other
) &&
1708 !UNIT_IS_ACTIVE_OR_ACTIVATING(unit_active_state(other
)))
1709 manager_add_job(u
->manager
, JOB_START
, other
, JOB_REPLACE
, true, NULL
, NULL
);
1711 SET_FOREACH(other
, u
->dependencies
[UNIT_BINDS_TO
], i
)
1712 if (!set_get(u
->dependencies
[UNIT_AFTER
], other
) &&
1713 !UNIT_IS_ACTIVE_OR_ACTIVATING(unit_active_state(other
)))
1714 manager_add_job(u
->manager
, JOB_START
, other
, JOB_REPLACE
, true, NULL
, NULL
);
1716 SET_FOREACH(other
, u
->dependencies
[UNIT_REQUIRES_OVERRIDABLE
], i
)
1717 if (!set_get(u
->dependencies
[UNIT_AFTER
], other
) &&
1718 !UNIT_IS_ACTIVE_OR_ACTIVATING(unit_active_state(other
)))
1719 manager_add_job(u
->manager
, JOB_START
, other
, JOB_FAIL
, false, NULL
, NULL
);
1721 SET_FOREACH(other
, u
->dependencies
[UNIT_WANTS
], i
)
1722 if (!set_get(u
->dependencies
[UNIT_AFTER
], other
) &&
1723 !UNIT_IS_ACTIVE_OR_ACTIVATING(unit_active_state(other
)))
1724 manager_add_job(u
->manager
, JOB_START
, other
, JOB_FAIL
, false, NULL
, NULL
);
1726 SET_FOREACH(other
, u
->dependencies
[UNIT_CONFLICTS
], i
)
1727 if (!UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(other
)))
1728 manager_add_job(u
->manager
, JOB_STOP
, other
, JOB_REPLACE
, true, NULL
, NULL
);
1730 SET_FOREACH(other
, u
->dependencies
[UNIT_CONFLICTED_BY
], i
)
1731 if (!UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(other
)))
1732 manager_add_job(u
->manager
, JOB_STOP
, other
, JOB_REPLACE
, true, NULL
, NULL
);
1735 static void retroactively_stop_dependencies(Unit
*u
) {
1740 assert(UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(u
)));
1742 /* Pull down units which are bound to us recursively if enabled */
1743 SET_FOREACH(other
, u
->dependencies
[UNIT_BOUND_BY
], i
)
1744 if (!UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(other
)))
1745 manager_add_job(u
->manager
, JOB_STOP
, other
, JOB_REPLACE
, true, NULL
, NULL
);
1748 static void check_unneeded_dependencies(Unit
*u
) {
1753 assert(UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(u
)));
1755 /* Garbage collect services that might not be needed anymore, if enabled */
1756 SET_FOREACH(other
, u
->dependencies
[UNIT_REQUIRES
], i
)
1757 if (!UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(other
)))
1758 unit_check_unneeded(other
);
1759 SET_FOREACH(other
, u
->dependencies
[UNIT_REQUIRES_OVERRIDABLE
], i
)
1760 if (!UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(other
)))
1761 unit_check_unneeded(other
);
1762 SET_FOREACH(other
, u
->dependencies
[UNIT_WANTS
], i
)
1763 if (!UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(other
)))
1764 unit_check_unneeded(other
);
1765 SET_FOREACH(other
, u
->dependencies
[UNIT_REQUISITE
], i
)
1766 if (!UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(other
)))
1767 unit_check_unneeded(other
);
1768 SET_FOREACH(other
, u
->dependencies
[UNIT_REQUISITE_OVERRIDABLE
], i
)
1769 if (!UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(other
)))
1770 unit_check_unneeded(other
);
1771 SET_FOREACH(other
, u
->dependencies
[UNIT_BINDS_TO
], i
)
1772 if (!UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(other
)))
1773 unit_check_unneeded(other
);
1776 void unit_start_on_failure(Unit
*u
) {
1782 if (set_size(u
->dependencies
[UNIT_ON_FAILURE
]) <= 0)
1785 log_unit_info(u
, "Triggering OnFailure= dependencies.");
1787 SET_FOREACH(other
, u
->dependencies
[UNIT_ON_FAILURE
], i
) {
1790 r
= manager_add_job(u
->manager
, JOB_START
, other
, u
->on_failure_job_mode
, true, NULL
, NULL
);
1792 log_unit_error_errno(u
, r
, "Failed to enqueue OnFailure= job: %m");
1796 void unit_trigger_notify(Unit
*u
) {
1802 SET_FOREACH(other
, u
->dependencies
[UNIT_TRIGGERED_BY
], i
)
1803 if (UNIT_VTABLE(other
)->trigger_notify
)
1804 UNIT_VTABLE(other
)->trigger_notify(other
, u
);
1807 void unit_notify(Unit
*u
, UnitActiveState os
, UnitActiveState ns
, bool reload_success
) {
1812 assert(os
< _UNIT_ACTIVE_STATE_MAX
);
1813 assert(ns
< _UNIT_ACTIVE_STATE_MAX
);
1815 /* Note that this is called for all low-level state changes,
1816 * even if they might map to the same high-level
1817 * UnitActiveState! That means that ns == os is an expected
1818 * behavior here. For example: if a mount point is remounted
1819 * this function will be called too! */
1823 /* Update timestamps for state changes */
1824 if (m
->n_reloading
<= 0) {
1827 dual_timestamp_get(&ts
);
1829 if (UNIT_IS_INACTIVE_OR_FAILED(os
) && !UNIT_IS_INACTIVE_OR_FAILED(ns
))
1830 u
->inactive_exit_timestamp
= ts
;
1831 else if (!UNIT_IS_INACTIVE_OR_FAILED(os
) && UNIT_IS_INACTIVE_OR_FAILED(ns
))
1832 u
->inactive_enter_timestamp
= ts
;
1834 if (!UNIT_IS_ACTIVE_OR_RELOADING(os
) && UNIT_IS_ACTIVE_OR_RELOADING(ns
))
1835 u
->active_enter_timestamp
= ts
;
1836 else if (UNIT_IS_ACTIVE_OR_RELOADING(os
) && !UNIT_IS_ACTIVE_OR_RELOADING(ns
))
1837 u
->active_exit_timestamp
= ts
;
1840 /* Keep track of failed units */
1841 (void) manager_update_failed_units(u
->manager
, u
, ns
== UNIT_FAILED
);
1843 /* Make sure the cgroup is always removed when we become inactive */
1844 if (UNIT_IS_INACTIVE_OR_FAILED(ns
))
1845 unit_prune_cgroup(u
);
1847 /* Note that this doesn't apply to RemainAfterExit services exiting
1848 * successfully, since there's no change of state in that case. Which is
1849 * why it is handled in service_set_state() */
1850 if (UNIT_IS_INACTIVE_OR_FAILED(os
) != UNIT_IS_INACTIVE_OR_FAILED(ns
)) {
1853 ec
= unit_get_exec_context(u
);
1854 if (ec
&& exec_context_may_touch_console(ec
)) {
1855 if (UNIT_IS_INACTIVE_OR_FAILED(ns
)) {
1858 if (m
->n_on_console
== 0)
1859 /* unset no_console_output flag, since the console is free */
1860 m
->no_console_output
= false;
1869 if (u
->job
->state
== JOB_WAITING
)
1871 /* So we reached a different state for this
1872 * job. Let's see if we can run it now if it
1873 * failed previously due to EAGAIN. */
1874 job_add_to_run_queue(u
->job
);
1876 /* Let's check whether this state change constitutes a
1877 * finished job, or maybe contradicts a running job and
1878 * hence needs to invalidate jobs. */
1880 switch (u
->job
->type
) {
1883 case JOB_VERIFY_ACTIVE
:
1885 if (UNIT_IS_ACTIVE_OR_RELOADING(ns
))
1886 job_finish_and_invalidate(u
->job
, JOB_DONE
, true);
1887 else if (u
->job
->state
== JOB_RUNNING
&& ns
!= UNIT_ACTIVATING
) {
1890 if (UNIT_IS_INACTIVE_OR_FAILED(ns
))
1891 job_finish_and_invalidate(u
->job
, ns
== UNIT_FAILED
? JOB_FAILED
: JOB_DONE
, true);
1897 case JOB_RELOAD_OR_START
:
1899 if (u
->job
->state
== JOB_RUNNING
) {
1900 if (ns
== UNIT_ACTIVE
)
1901 job_finish_and_invalidate(u
->job
, reload_success
? JOB_DONE
: JOB_FAILED
, true);
1902 else if (ns
!= UNIT_ACTIVATING
&& ns
!= UNIT_RELOADING
) {
1905 if (UNIT_IS_INACTIVE_OR_FAILED(ns
))
1906 job_finish_and_invalidate(u
->job
, ns
== UNIT_FAILED
? JOB_FAILED
: JOB_DONE
, true);
1914 case JOB_TRY_RESTART
:
1916 if (UNIT_IS_INACTIVE_OR_FAILED(ns
))
1917 job_finish_and_invalidate(u
->job
, JOB_DONE
, true);
1918 else if (u
->job
->state
== JOB_RUNNING
&& ns
!= UNIT_DEACTIVATING
) {
1920 job_finish_and_invalidate(u
->job
, JOB_FAILED
, true);
1926 assert_not_reached("Job type unknown");
1932 if (m
->n_reloading
<= 0) {
1934 /* If this state change happened without being
1935 * requested by a job, then let's retroactively start
1936 * or stop dependencies. We skip that step when
1937 * deserializing, since we don't want to create any
1938 * additional jobs just because something is already
1942 if (UNIT_IS_INACTIVE_OR_FAILED(os
) && UNIT_IS_ACTIVE_OR_ACTIVATING(ns
))
1943 retroactively_start_dependencies(u
);
1944 else if (UNIT_IS_ACTIVE_OR_ACTIVATING(os
) && UNIT_IS_INACTIVE_OR_DEACTIVATING(ns
))
1945 retroactively_stop_dependencies(u
);
1948 /* stop unneeded units regardless if going down was expected or not */
1949 if (UNIT_IS_INACTIVE_OR_DEACTIVATING(ns
))
1950 check_unneeded_dependencies(u
);
1952 if (ns
!= os
&& ns
== UNIT_FAILED
) {
1953 log_unit_notice(u
, "Unit entered failed state.");
1954 unit_start_on_failure(u
);
1958 /* Some names are special */
1959 if (UNIT_IS_ACTIVE_OR_RELOADING(ns
)) {
1961 if (unit_has_name(u
, SPECIAL_DBUS_SERVICE
))
1962 /* The bus might have just become available,
1963 * hence try to connect to it, if we aren't
1967 if (u
->type
== UNIT_SERVICE
&&
1968 !UNIT_IS_ACTIVE_OR_RELOADING(os
) &&
1969 m
->n_reloading
<= 0) {
1970 /* Write audit record if we have just finished starting up */
1971 manager_send_unit_audit(m
, u
, AUDIT_SERVICE_START
, true);
1975 if (!UNIT_IS_ACTIVE_OR_RELOADING(os
))
1976 manager_send_unit_plymouth(m
, u
);
1980 /* We don't care about D-Bus here, since we'll get an
1981 * asynchronous notification for it anyway. */
1983 if (u
->type
== UNIT_SERVICE
&&
1984 UNIT_IS_INACTIVE_OR_FAILED(ns
) &&
1985 !UNIT_IS_INACTIVE_OR_FAILED(os
) &&
1986 m
->n_reloading
<= 0) {
1988 /* Hmm, if there was no start record written
1989 * write it now, so that we always have a nice
1992 manager_send_unit_audit(m
, u
, AUDIT_SERVICE_START
, ns
== UNIT_INACTIVE
);
1994 if (ns
== UNIT_INACTIVE
)
1995 manager_send_unit_audit(m
, u
, AUDIT_SERVICE_STOP
, true);
1997 /* Write audit record if we have just finished shutting down */
1998 manager_send_unit_audit(m
, u
, AUDIT_SERVICE_STOP
, ns
== UNIT_INACTIVE
);
2000 u
->in_audit
= false;
2004 manager_recheck_journal(m
);
2005 unit_trigger_notify(u
);
2007 if (u
->manager
->n_reloading
<= 0) {
2008 /* Maybe we finished startup and are now ready for
2009 * being stopped because unneeded? */
2010 unit_check_unneeded(u
);
2012 /* Maybe we finished startup, but something we needed
2013 * has vanished? Let's die then. (This happens when
2014 * something BindsTo= to a Type=oneshot unit, as these
2015 * units go directly from starting to inactive,
2016 * without ever entering started.) */
2017 unit_check_binds_to(u
);
2020 unit_add_to_dbus_queue(u
);
2021 unit_add_to_gc_queue(u
);
2024 int unit_watch_pid(Unit
*u
, pid_t pid
) {
2030 /* Watch a specific PID. We only support one or two units
2031 * watching each PID for now, not more. */
2033 r
= set_ensure_allocated(&u
->pids
, NULL
);
2037 r
= hashmap_ensure_allocated(&u
->manager
->watch_pids1
, NULL
);
2041 r
= hashmap_put(u
->manager
->watch_pids1
, PID_TO_PTR(pid
), u
);
2043 r
= hashmap_ensure_allocated(&u
->manager
->watch_pids2
, NULL
);
2047 r
= hashmap_put(u
->manager
->watch_pids2
, PID_TO_PTR(pid
), u
);
2050 q
= set_put(u
->pids
, PID_TO_PTR(pid
));
2057 void unit_unwatch_pid(Unit
*u
, pid_t pid
) {
2061 (void) hashmap_remove_value(u
->manager
->watch_pids1
, PID_TO_PTR(pid
), u
);
2062 (void) hashmap_remove_value(u
->manager
->watch_pids2
, PID_TO_PTR(pid
), u
);
2063 (void) set_remove(u
->pids
, PID_TO_PTR(pid
));
2066 void unit_unwatch_all_pids(Unit
*u
) {
2069 while (!set_isempty(u
->pids
))
2070 unit_unwatch_pid(u
, PTR_TO_PID(set_first(u
->pids
)));
2072 u
->pids
= set_free(u
->pids
);
2075 void unit_tidy_watch_pids(Unit
*u
, pid_t except1
, pid_t except2
) {
2081 /* Cleans dead PIDs from our list */
2083 SET_FOREACH(e
, u
->pids
, i
) {
2084 pid_t pid
= PTR_TO_PID(e
);
2086 if (pid
== except1
|| pid
== except2
)
2089 if (!pid_is_unwaited(pid
))
2090 unit_unwatch_pid(u
, pid
);
2094 bool unit_job_is_applicable(Unit
*u
, JobType j
) {
2096 assert(j
>= 0 && j
< _JOB_TYPE_MAX
);
2100 case JOB_VERIFY_ACTIVE
:
2107 case JOB_TRY_RESTART
:
2108 return unit_can_start(u
);
2111 return unit_can_reload(u
);
2113 case JOB_RELOAD_OR_START
:
2114 return unit_can_reload(u
) && unit_can_start(u
);
2117 assert_not_reached("Invalid job type");
2121 static void maybe_warn_about_dependency(Unit
*u
, const char *other
, UnitDependency dependency
) {
2124 /* Only warn about some unit types */
2125 if (!IN_SET(dependency
, UNIT_CONFLICTS
, UNIT_CONFLICTED_BY
, UNIT_BEFORE
, UNIT_AFTER
, UNIT_ON_FAILURE
, UNIT_TRIGGERS
, UNIT_TRIGGERED_BY
))
2128 if (streq_ptr(u
->id
, other
))
2129 log_unit_warning(u
, "Dependency %s=%s dropped", unit_dependency_to_string(dependency
), u
->id
);
2131 log_unit_warning(u
, "Dependency %s=%s dropped, merged into %s", unit_dependency_to_string(dependency
), strna(other
), u
->id
);
2134 int unit_add_dependency(Unit
*u
, UnitDependency d
, Unit
*other
, bool add_reference
) {
2136 static const UnitDependency inverse_table
[_UNIT_DEPENDENCY_MAX
] = {
2137 [UNIT_REQUIRES
] = UNIT_REQUIRED_BY
,
2138 [UNIT_REQUIRES_OVERRIDABLE
] = UNIT_REQUIRED_BY_OVERRIDABLE
,
2139 [UNIT_WANTS
] = UNIT_WANTED_BY
,
2140 [UNIT_REQUISITE
] = UNIT_REQUISITE_OF
,
2141 [UNIT_REQUISITE_OVERRIDABLE
] = UNIT_REQUISITE_OF_OVERRIDABLE
,
2142 [UNIT_BINDS_TO
] = UNIT_BOUND_BY
,
2143 [UNIT_PART_OF
] = UNIT_CONSISTS_OF
,
2144 [UNIT_REQUIRED_BY
] = UNIT_REQUIRES
,
2145 [UNIT_REQUIRED_BY_OVERRIDABLE
] = UNIT_REQUIRES_OVERRIDABLE
,
2146 [UNIT_REQUISITE_OF
] = UNIT_REQUISITE
,
2147 [UNIT_REQUISITE_OF_OVERRIDABLE
] = UNIT_REQUISITE_OVERRIDABLE
,
2148 [UNIT_WANTED_BY
] = UNIT_WANTS
,
2149 [UNIT_BOUND_BY
] = UNIT_BINDS_TO
,
2150 [UNIT_CONSISTS_OF
] = UNIT_PART_OF
,
2151 [UNIT_CONFLICTS
] = UNIT_CONFLICTED_BY
,
2152 [UNIT_CONFLICTED_BY
] = UNIT_CONFLICTS
,
2153 [UNIT_BEFORE
] = UNIT_AFTER
,
2154 [UNIT_AFTER
] = UNIT_BEFORE
,
2155 [UNIT_ON_FAILURE
] = _UNIT_DEPENDENCY_INVALID
,
2156 [UNIT_REFERENCES
] = UNIT_REFERENCED_BY
,
2157 [UNIT_REFERENCED_BY
] = UNIT_REFERENCES
,
2158 [UNIT_TRIGGERS
] = UNIT_TRIGGERED_BY
,
2159 [UNIT_TRIGGERED_BY
] = UNIT_TRIGGERS
,
2160 [UNIT_PROPAGATES_RELOAD_TO
] = UNIT_RELOAD_PROPAGATED_FROM
,
2161 [UNIT_RELOAD_PROPAGATED_FROM
] = UNIT_PROPAGATES_RELOAD_TO
,
2162 [UNIT_JOINS_NAMESPACE_OF
] = UNIT_JOINS_NAMESPACE_OF
,
2164 int r
, q
= 0, v
= 0, w
= 0;
2165 Unit
*orig_u
= u
, *orig_other
= other
;
2168 assert(d
>= 0 && d
< _UNIT_DEPENDENCY_MAX
);
2171 u
= unit_follow_merge(u
);
2172 other
= unit_follow_merge(other
);
2174 /* We won't allow dependencies on ourselves. We will not
2175 * consider them an error however. */
2177 maybe_warn_about_dependency(orig_u
, orig_other
->id
, d
);
2181 r
= set_ensure_allocated(&u
->dependencies
[d
], NULL
);
2185 if (inverse_table
[d
] != _UNIT_DEPENDENCY_INVALID
) {
2186 r
= set_ensure_allocated(&other
->dependencies
[inverse_table
[d
]], NULL
);
2191 if (add_reference
) {
2192 r
= set_ensure_allocated(&u
->dependencies
[UNIT_REFERENCES
], NULL
);
2196 r
= set_ensure_allocated(&other
->dependencies
[UNIT_REFERENCED_BY
], NULL
);
2201 q
= set_put(u
->dependencies
[d
], other
);
2205 if (inverse_table
[d
] != _UNIT_DEPENDENCY_INVALID
&& inverse_table
[d
] != d
) {
2206 v
= set_put(other
->dependencies
[inverse_table
[d
]], u
);
2213 if (add_reference
) {
2214 w
= set_put(u
->dependencies
[UNIT_REFERENCES
], other
);
2220 r
= set_put(other
->dependencies
[UNIT_REFERENCED_BY
], u
);
2225 unit_add_to_dbus_queue(u
);
2230 set_remove(u
->dependencies
[d
], other
);
2233 set_remove(other
->dependencies
[inverse_table
[d
]], u
);
2236 set_remove(u
->dependencies
[UNIT_REFERENCES
], other
);
2241 int unit_add_two_dependencies(Unit
*u
, UnitDependency d
, UnitDependency e
, Unit
*other
, bool add_reference
) {
2246 r
= unit_add_dependency(u
, d
, other
, add_reference
);
2250 return unit_add_dependency(u
, e
, other
, add_reference
);
2253 static int resolve_template(Unit
*u
, const char *name
, const char*path
, char **buf
, const char **ret
) {
2257 assert(name
|| path
);
2262 name
= basename(path
);
2264 if (!unit_name_is_valid(name
, UNIT_NAME_TEMPLATE
)) {
2271 r
= unit_name_replace_instance(name
, u
->instance
, buf
);
2273 _cleanup_free_
char *i
= NULL
;
2275 r
= unit_name_to_prefix(u
->id
, &i
);
2279 r
= unit_name_replace_instance(name
, i
, buf
);
2288 int unit_add_dependency_by_name(Unit
*u
, UnitDependency d
, const char *name
, const char *path
, bool add_reference
) {
2289 _cleanup_free_
char *buf
= NULL
;
2294 assert(name
|| path
);
2296 r
= resolve_template(u
, name
, path
, &buf
, &name
);
2300 r
= manager_load_unit(u
->manager
, name
, path
, NULL
, &other
);
2304 return unit_add_dependency(u
, d
, other
, add_reference
);
2307 int unit_add_two_dependencies_by_name(Unit
*u
, UnitDependency d
, UnitDependency e
, const char *name
, const char *path
, bool add_reference
) {
2308 _cleanup_free_
char *buf
= NULL
;
2313 assert(name
|| path
);
2315 r
= resolve_template(u
, name
, path
, &buf
, &name
);
2319 r
= manager_load_unit(u
->manager
, name
, path
, NULL
, &other
);
2323 return unit_add_two_dependencies(u
, d
, e
, other
, add_reference
);
2326 int set_unit_path(const char *p
) {
2327 /* This is mostly for debug purposes */
2328 if (setenv("SYSTEMD_UNIT_PATH", p
, 0) < 0)
2334 char *unit_dbus_path(Unit
*u
) {
2340 return unit_dbus_path_from_name(u
->id
);
2343 int unit_set_slice(Unit
*u
, Unit
*slice
) {
2347 /* Sets the unit slice if it has not been set before. Is extra
2348 * careful, to only allow this for units that actually have a
2349 * cgroup context. Also, we don't allow to set this for slices
2350 * (since the parent slice is derived from the name). Make
2351 * sure the unit we set is actually a slice. */
2353 if (!UNIT_HAS_CGROUP_CONTEXT(u
))
2356 if (u
->type
== UNIT_SLICE
)
2359 if (unit_active_state(u
) != UNIT_INACTIVE
)
2362 if (slice
->type
!= UNIT_SLICE
)
2365 if (unit_has_name(u
, SPECIAL_INIT_SCOPE
) &&
2366 !unit_has_name(slice
, SPECIAL_ROOT_SLICE
))
2369 if (UNIT_DEREF(u
->slice
) == slice
)
2372 if (UNIT_ISSET(u
->slice
))
2375 unit_ref_set(&u
->slice
, slice
);
2379 int unit_set_default_slice(Unit
*u
) {
2380 _cleanup_free_
char *b
= NULL
;
2381 const char *slice_name
;
2387 if (UNIT_ISSET(u
->slice
))
2391 _cleanup_free_
char *prefix
= NULL
, *escaped
= NULL
;
2393 /* Implicitly place all instantiated units in their
2394 * own per-template slice */
2396 r
= unit_name_to_prefix(u
->id
, &prefix
);
2400 /* The prefix is already escaped, but it might include
2401 * "-" which has a special meaning for slice units,
2402 * hence escape it here extra. */
2403 escaped
= unit_name_escape(prefix
);
2407 if (u
->manager
->running_as
== MANAGER_SYSTEM
)
2408 b
= strjoin("system-", escaped
, ".slice", NULL
);
2410 b
= strappend(escaped
, ".slice");
2417 u
->manager
->running_as
== MANAGER_SYSTEM
&& !unit_has_name(u
, SPECIAL_INIT_SCOPE
)
2418 ? SPECIAL_SYSTEM_SLICE
2419 : SPECIAL_ROOT_SLICE
;
2421 r
= manager_load_unit(u
->manager
, slice_name
, NULL
, NULL
, &slice
);
2425 return unit_set_slice(u
, slice
);
2428 const char *unit_slice_name(Unit
*u
) {
2431 if (!UNIT_ISSET(u
->slice
))
2434 return UNIT_DEREF(u
->slice
)->id
;
2437 int unit_load_related_unit(Unit
*u
, const char *type
, Unit
**_found
) {
2438 _cleanup_free_
char *t
= NULL
;
2445 r
= unit_name_change_suffix(u
->id
, type
, &t
);
2448 if (unit_has_name(u
, t
))
2451 r
= manager_load_unit(u
->manager
, t
, NULL
, NULL
, _found
);
2452 assert(r
< 0 || *_found
!= u
);
2456 static int signal_name_owner_changed(sd_bus_message
*message
, void *userdata
, sd_bus_error
*error
) {
2457 const char *name
, *old_owner
, *new_owner
;
2464 r
= sd_bus_message_read(message
, "sss", &name
, &old_owner
, &new_owner
);
2466 bus_log_parse_error(r
);
2470 if (UNIT_VTABLE(u
)->bus_name_owner_change
)
2471 UNIT_VTABLE(u
)->bus_name_owner_change(u
, name
, old_owner
, new_owner
);
2476 int unit_install_bus_match(Unit
*u
, sd_bus
*bus
, const char *name
) {
2483 if (u
->match_bus_slot
)
2486 match
= strjoina("type='signal',"
2487 "sender='org.freedesktop.DBus',"
2488 "path='/org/freedesktop/DBus',"
2489 "interface='org.freedesktop.DBus',"
2490 "member='NameOwnerChanged',"
2491 "arg0='", name
, "'",
2494 return sd_bus_add_match(bus
, &u
->match_bus_slot
, match
, signal_name_owner_changed
, u
);
2497 int unit_watch_bus_name(Unit
*u
, const char *name
) {
2503 /* Watch a specific name on the bus. We only support one unit
2504 * watching each name for now. */
2506 if (u
->manager
->api_bus
) {
2507 /* If the bus is already available, install the match directly.
2508 * Otherwise, just put the name in the list. bus_setup_api() will take care later. */
2509 r
= unit_install_bus_match(u
, u
->manager
->api_bus
, name
);
2511 return log_warning_errno(r
, "Failed to subscribe to NameOwnerChanged signal: %m");
2514 r
= hashmap_put(u
->manager
->watch_bus
, name
, u
);
2516 u
->match_bus_slot
= sd_bus_slot_unref(u
->match_bus_slot
);
2517 return log_warning_errno(r
, "Failed to put bus name to hashmap: %m");
2523 void unit_unwatch_bus_name(Unit
*u
, const char *name
) {
2527 hashmap_remove_value(u
->manager
->watch_bus
, name
, u
);
2528 u
->match_bus_slot
= sd_bus_slot_unref(u
->match_bus_slot
);
2531 bool unit_can_serialize(Unit
*u
) {
2534 return UNIT_VTABLE(u
)->serialize
&& UNIT_VTABLE(u
)->deserialize_item
;
2537 int unit_serialize(Unit
*u
, FILE *f
, FDSet
*fds
, bool serialize_jobs
) {
2544 if (unit_can_serialize(u
)) {
2547 r
= UNIT_VTABLE(u
)->serialize(u
, f
, fds
);
2551 rt
= unit_get_exec_runtime(u
);
2553 r
= exec_runtime_serialize(u
, rt
, f
, fds
);
2559 dual_timestamp_serialize(f
, "inactive-exit-timestamp", &u
->inactive_exit_timestamp
);
2560 dual_timestamp_serialize(f
, "active-enter-timestamp", &u
->active_enter_timestamp
);
2561 dual_timestamp_serialize(f
, "active-exit-timestamp", &u
->active_exit_timestamp
);
2562 dual_timestamp_serialize(f
, "inactive-enter-timestamp", &u
->inactive_enter_timestamp
);
2563 dual_timestamp_serialize(f
, "condition-timestamp", &u
->condition_timestamp
);
2564 dual_timestamp_serialize(f
, "assert-timestamp", &u
->assert_timestamp
);
2566 if (dual_timestamp_is_set(&u
->condition_timestamp
))
2567 unit_serialize_item(u
, f
, "condition-result", yes_no(u
->condition_result
));
2569 if (dual_timestamp_is_set(&u
->assert_timestamp
))
2570 unit_serialize_item(u
, f
, "assert-result", yes_no(u
->assert_result
));
2572 unit_serialize_item(u
, f
, "transient", yes_no(u
->transient
));
2573 unit_serialize_item_format(u
, f
, "cpuacct-usage-base", "%" PRIu64
, u
->cpuacct_usage_base
);
2576 unit_serialize_item(u
, f
, "cgroup", u
->cgroup_path
);
2577 unit_serialize_item(u
, f
, "cgroup-realized", yes_no(u
->cgroup_realized
));
2579 if (u
->cgroup_netclass_id
)
2580 unit_serialize_item_format(u
, f
, "netclass-id", "%" PRIu32
, u
->cgroup_netclass_id
);
2582 if (serialize_jobs
) {
2584 fprintf(f
, "job\n");
2585 job_serialize(u
->job
, f
, fds
);
2589 fprintf(f
, "job\n");
2590 job_serialize(u
->nop_job
, f
, fds
);
2599 int unit_serialize_item(Unit
*u
, FILE *f
, const char *key
, const char *value
) {
2615 int unit_serialize_item_escaped(Unit
*u
, FILE *f
, const char *key
, const char *value
) {
2616 _cleanup_free_
char *c
= NULL
;
2637 int unit_serialize_item_fd(Unit
*u
, FILE *f
, FDSet
*fds
, const char *key
, int fd
) {
2647 copy
= fdset_put_dup(fds
, fd
);
2651 fprintf(f
, "%s=%i\n", key
, copy
);
2655 void unit_serialize_item_format(Unit
*u
, FILE *f
, const char *key
, const char *format
, ...) {
2666 va_start(ap
, format
);
2667 vfprintf(f
, format
, ap
);
2673 int unit_deserialize(Unit
*u
, FILE *f
, FDSet
*fds
) {
2674 ExecRuntime
**rt
= NULL
;
2682 offset
= UNIT_VTABLE(u
)->exec_runtime_offset
;
2684 rt
= (ExecRuntime
**) ((uint8_t*) u
+ offset
);
2687 char line
[LINE_MAX
], *l
, *v
;
2690 if (!fgets(line
, sizeof(line
), f
)) {
2703 k
= strcspn(l
, "=");
2711 if (streq(l
, "job")) {
2713 /* new-style serialized job */
2720 r
= job_deserialize(j
, f
, fds
);
2726 r
= hashmap_put(u
->manager
->jobs
, UINT32_TO_PTR(j
->id
), j
);
2732 r
= job_install_deserialized(j
);
2734 hashmap_remove(u
->manager
->jobs
, UINT32_TO_PTR(j
->id
));
2738 } else /* legacy for pre-44 */
2739 log_unit_warning(u
, "Update from too old systemd versions are unsupported, cannot deserialize job: %s", v
);
2741 } else if (streq(l
, "inactive-exit-timestamp")) {
2742 dual_timestamp_deserialize(v
, &u
->inactive_exit_timestamp
);
2744 } else if (streq(l
, "active-enter-timestamp")) {
2745 dual_timestamp_deserialize(v
, &u
->active_enter_timestamp
);
2747 } else if (streq(l
, "active-exit-timestamp")) {
2748 dual_timestamp_deserialize(v
, &u
->active_exit_timestamp
);
2750 } else if (streq(l
, "inactive-enter-timestamp")) {
2751 dual_timestamp_deserialize(v
, &u
->inactive_enter_timestamp
);
2753 } else if (streq(l
, "condition-timestamp")) {
2754 dual_timestamp_deserialize(v
, &u
->condition_timestamp
);
2756 } else if (streq(l
, "assert-timestamp")) {
2757 dual_timestamp_deserialize(v
, &u
->assert_timestamp
);
2759 } else if (streq(l
, "condition-result")) {
2761 r
= parse_boolean(v
);
2763 log_unit_debug(u
, "Failed to parse condition result value %s, ignoring.", v
);
2765 u
->condition_result
= r
;
2769 } else if (streq(l
, "assert-result")) {
2771 r
= parse_boolean(v
);
2773 log_unit_debug(u
, "Failed to parse assert result value %s, ignoring.", v
);
2775 u
->assert_result
= r
;
2779 } else if (streq(l
, "transient")) {
2781 r
= parse_boolean(v
);
2783 log_unit_debug(u
, "Failed to parse transient bool %s, ignoring.", v
);
2789 } else if (streq(l
, "cpuacct-usage-base")) {
2791 r
= safe_atou64(v
, &u
->cpuacct_usage_base
);
2793 log_unit_debug(u
, "Failed to parse CPU usage %s, ignoring.", v
);
2797 } else if (streq(l
, "cgroup")) {
2799 r
= unit_set_cgroup_path(u
, v
);
2801 log_unit_debug_errno(u
, r
, "Failed to set cgroup path %s, ignoring: %m", v
);
2803 (void) unit_watch_cgroup(u
);
2806 } else if (streq(l
, "cgroup-realized")) {
2809 b
= parse_boolean(v
);
2811 log_unit_debug(u
, "Failed to parse cgroup-realized bool %s, ignoring.", v
);
2813 u
->cgroup_realized
= b
;
2816 } else if (streq(l
, "netclass-id")) {
2817 r
= safe_atou32(v
, &u
->cgroup_netclass_id
);
2819 log_unit_debug(u
, "Failed to parse netclass ID %s, ignoring.", v
);
2821 r
= unit_add_to_netclass_cgroup(u
);
2823 log_unit_debug_errno(u
, r
, "Failed to add unit to netclass cgroup, ignoring: %m");
2829 if (unit_can_serialize(u
)) {
2831 r
= exec_runtime_deserialize_item(u
, rt
, l
, v
, fds
);
2833 log_unit_warning(u
, "Failed to deserialize runtime parameter '%s', ignoring.", l
);
2837 /* Returns positive if key was handled by the call */
2842 r
= UNIT_VTABLE(u
)->deserialize_item(u
, l
, v
, fds
);
2844 log_unit_warning(u
, "Failed to deserialize unit parameter '%s', ignoring.", l
);
2849 int unit_add_node_link(Unit
*u
, const char *what
, bool wants
) {
2851 _cleanup_free_
char *e
= NULL
;
2856 /* Adds in links to the device node that this unit is based on */
2860 if (!is_device_path(what
))
2863 /* When device units aren't supported (such as in a
2864 * container), don't create dependencies on them. */
2865 if (!unit_type_supported(UNIT_DEVICE
))
2868 r
= unit_name_from_path(what
, ".device", &e
);
2872 r
= manager_load_unit(u
->manager
, e
, NULL
, NULL
, &device
);
2876 r
= unit_add_two_dependencies(u
, UNIT_AFTER
, u
->manager
->running_as
== MANAGER_SYSTEM
? UNIT_BINDS_TO
: UNIT_WANTS
, device
, true);
2881 r
= unit_add_dependency(device
, UNIT_WANTS
, u
, false);
2889 int unit_coldplug(Unit
*u
) {
2894 /* Make sure we don't enter a loop, when coldplugging
2899 u
->coldplugged
= true;
2901 if (UNIT_VTABLE(u
)->coldplug
) {
2902 r
= UNIT_VTABLE(u
)->coldplug(u
);
2908 r
= job_coldplug(u
->job
);
2916 void unit_status_printf(Unit
*u
, const char *status
, const char *unit_status_msg_format
) {
2917 DISABLE_WARNING_FORMAT_NONLITERAL
;
2918 manager_status_printf(u
->manager
, STATUS_TYPE_NORMAL
,
2919 status
, unit_status_msg_format
, unit_description(u
));
2923 bool unit_need_daemon_reload(Unit
*u
) {
2924 _cleanup_strv_free_
char **t
= NULL
;
2927 unsigned loaded_cnt
, current_cnt
;
2931 if (u
->fragment_path
) {
2933 if (stat(u
->fragment_path
, &st
) < 0)
2934 /* What, cannot access this anymore? */
2937 if (u
->fragment_mtime
> 0 &&
2938 timespec_load(&st
.st_mtim
) != u
->fragment_mtime
)
2942 if (u
->source_path
) {
2944 if (stat(u
->source_path
, &st
) < 0)
2947 if (u
->source_mtime
> 0 &&
2948 timespec_load(&st
.st_mtim
) != u
->source_mtime
)
2952 (void) unit_find_dropin_paths(u
, &t
);
2953 loaded_cnt
= strv_length(t
);
2954 current_cnt
= strv_length(u
->dropin_paths
);
2956 if (loaded_cnt
== current_cnt
) {
2957 if (loaded_cnt
== 0)
2960 if (strv_overlap(u
->dropin_paths
, t
)) {
2961 STRV_FOREACH(path
, u
->dropin_paths
) {
2963 if (stat(*path
, &st
) < 0)
2966 if (u
->dropin_mtime
> 0 &&
2967 timespec_load(&st
.st_mtim
) > u
->dropin_mtime
)
2978 void unit_reset_failed(Unit
*u
) {
2981 if (UNIT_VTABLE(u
)->reset_failed
)
2982 UNIT_VTABLE(u
)->reset_failed(u
);
2985 Unit
*unit_following(Unit
*u
) {
2988 if (UNIT_VTABLE(u
)->following
)
2989 return UNIT_VTABLE(u
)->following(u
);
2994 bool unit_stop_pending(Unit
*u
) {
2997 /* This call does check the current state of the unit. It's
2998 * hence useful to be called from state change calls of the
2999 * unit itself, where the state isn't updated yet. This is
3000 * different from unit_inactive_or_pending() which checks both
3001 * the current state and for a queued job. */
3003 return u
->job
&& u
->job
->type
== JOB_STOP
;
3006 bool unit_inactive_or_pending(Unit
*u
) {
3009 /* Returns true if the unit is inactive or going down */
3011 if (UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(u
)))
3014 if (unit_stop_pending(u
))
3020 bool unit_active_or_pending(Unit
*u
) {
3023 /* Returns true if the unit is active or going up */
3025 if (UNIT_IS_ACTIVE_OR_ACTIVATING(unit_active_state(u
)))
3029 (u
->job
->type
== JOB_START
||
3030 u
->job
->type
== JOB_RELOAD_OR_START
||
3031 u
->job
->type
== JOB_RESTART
))
3037 int unit_kill(Unit
*u
, KillWho w
, int signo
, sd_bus_error
*error
) {
3039 assert(w
>= 0 && w
< _KILL_WHO_MAX
);
3041 assert(signo
< _NSIG
);
3043 if (!UNIT_VTABLE(u
)->kill
)
3046 return UNIT_VTABLE(u
)->kill(u
, w
, signo
, error
);
3049 static Set
*unit_pid_set(pid_t main_pid
, pid_t control_pid
) {
3053 pid_set
= set_new(NULL
);
3057 /* Exclude the main/control pids from being killed via the cgroup */
3059 r
= set_put(pid_set
, PID_TO_PTR(main_pid
));
3064 if (control_pid
> 0) {
3065 r
= set_put(pid_set
, PID_TO_PTR(control_pid
));
3077 int unit_kill_common(
3083 sd_bus_error
*error
) {
3086 bool killed
= false;
3088 if (IN_SET(who
, KILL_MAIN
, KILL_MAIN_FAIL
)) {
3090 return sd_bus_error_setf(error
, BUS_ERROR_NO_SUCH_PROCESS
, "%s units have no main processes", unit_type_to_string(u
->type
));
3091 else if (main_pid
== 0)
3092 return sd_bus_error_set_const(error
, BUS_ERROR_NO_SUCH_PROCESS
, "No main process to kill");
3095 if (IN_SET(who
, KILL_CONTROL
, KILL_CONTROL_FAIL
)) {
3096 if (control_pid
< 0)
3097 return sd_bus_error_setf(error
, BUS_ERROR_NO_SUCH_PROCESS
, "%s units have no control processes", unit_type_to_string(u
->type
));
3098 else if (control_pid
== 0)
3099 return sd_bus_error_set_const(error
, BUS_ERROR_NO_SUCH_PROCESS
, "No control process to kill");
3102 if (IN_SET(who
, KILL_CONTROL
, KILL_CONTROL_FAIL
, KILL_ALL
, KILL_ALL_FAIL
))
3103 if (control_pid
> 0) {
3104 if (kill(control_pid
, signo
) < 0)
3110 if (IN_SET(who
, KILL_MAIN
, KILL_MAIN_FAIL
, KILL_ALL
, KILL_ALL_FAIL
))
3112 if (kill(main_pid
, signo
) < 0)
3118 if (IN_SET(who
, KILL_ALL
, KILL_ALL_FAIL
) && u
->cgroup_path
) {
3119 _cleanup_set_free_ Set
*pid_set
= NULL
;
3122 /* Exclude the main/control pids from being killed via the cgroup */
3123 pid_set
= unit_pid_set(main_pid
, control_pid
);
3127 q
= cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER
, u
->cgroup_path
, signo
, false, false, false, pid_set
);
3128 if (q
< 0 && q
!= -EAGAIN
&& q
!= -ESRCH
&& q
!= -ENOENT
)
3134 if (r
== 0 && !killed
&& IN_SET(who
, KILL_ALL_FAIL
, KILL_CONTROL_FAIL
, KILL_ALL_FAIL
))
3140 int unit_following_set(Unit
*u
, Set
**s
) {
3144 if (UNIT_VTABLE(u
)->following_set
)
3145 return UNIT_VTABLE(u
)->following_set(u
, s
);
3151 UnitFileState
unit_get_unit_file_state(Unit
*u
) {
3154 if (u
->unit_file_state
< 0 && u
->fragment_path
)
3155 u
->unit_file_state
= unit_file_get_state(
3156 u
->manager
->running_as
== MANAGER_SYSTEM
? UNIT_FILE_SYSTEM
: UNIT_FILE_USER
,
3157 NULL
, basename(u
->fragment_path
));
3159 return u
->unit_file_state
;
3162 int unit_get_unit_file_preset(Unit
*u
) {
3165 if (u
->unit_file_preset
< 0 && u
->fragment_path
)
3166 u
->unit_file_preset
= unit_file_query_preset(
3167 u
->manager
->running_as
== MANAGER_SYSTEM
? UNIT_FILE_SYSTEM
: UNIT_FILE_USER
,
3168 NULL
, basename(u
->fragment_path
));
3170 return u
->unit_file_preset
;
3173 Unit
* unit_ref_set(UnitRef
*ref
, Unit
*u
) {
3178 unit_ref_unset(ref
);
3181 LIST_PREPEND(refs
, u
->refs
, ref
);
3185 void unit_ref_unset(UnitRef
*ref
) {
3191 LIST_REMOVE(refs
, ref
->unit
->refs
, ref
);
3195 int unit_patch_contexts(Unit
*u
) {
3203 /* Patch in the manager defaults into the exec and cgroup
3204 * contexts, _after_ the rest of the settings have been
3207 ec
= unit_get_exec_context(u
);
3209 /* This only copies in the ones that need memory */
3210 for (i
= 0; i
< _RLIMIT_MAX
; i
++)
3211 if (u
->manager
->rlimit
[i
] && !ec
->rlimit
[i
]) {
3212 ec
->rlimit
[i
] = newdup(struct rlimit
, u
->manager
->rlimit
[i
], 1);
3217 if (u
->manager
->running_as
== MANAGER_USER
&&
3218 !ec
->working_directory
) {
3220 r
= get_home_dir(&ec
->working_directory
);
3224 /* Allow user services to run, even if the
3225 * home directory is missing */
3226 ec
->working_directory_missing_ok
= true;
3229 if (u
->manager
->running_as
== MANAGER_USER
&&
3230 (ec
->syscall_whitelist
||
3231 !set_isempty(ec
->syscall_filter
) ||
3232 !set_isempty(ec
->syscall_archs
) ||
3233 ec
->address_families_whitelist
||
3234 !set_isempty(ec
->address_families
)))
3235 ec
->no_new_privileges
= true;
3237 if (ec
->private_devices
)
3238 ec
->capability_bounding_set_drop
|= (uint64_t) 1ULL << (uint64_t) CAP_MKNOD
;
3241 cc
= unit_get_cgroup_context(u
);
3245 ec
->private_devices
&&
3246 cc
->device_policy
== CGROUP_AUTO
)
3247 cc
->device_policy
= CGROUP_CLOSED
;
3253 ExecContext
*unit_get_exec_context(Unit
*u
) {
3260 offset
= UNIT_VTABLE(u
)->exec_context_offset
;
3264 return (ExecContext
*) ((uint8_t*) u
+ offset
);
3267 KillContext
*unit_get_kill_context(Unit
*u
) {
3274 offset
= UNIT_VTABLE(u
)->kill_context_offset
;
3278 return (KillContext
*) ((uint8_t*) u
+ offset
);
3281 CGroupContext
*unit_get_cgroup_context(Unit
*u
) {
3287 offset
= UNIT_VTABLE(u
)->cgroup_context_offset
;
3291 return (CGroupContext
*) ((uint8_t*) u
+ offset
);
3294 ExecRuntime
*unit_get_exec_runtime(Unit
*u
) {
3300 offset
= UNIT_VTABLE(u
)->exec_runtime_offset
;
3304 return *(ExecRuntime
**) ((uint8_t*) u
+ offset
);
3307 static int unit_drop_in_dir(Unit
*u
, UnitSetPropertiesMode mode
, bool transient
, char **dir
) {
3310 if (u
->manager
->running_as
== MANAGER_USER
) {
3313 if (mode
== UNIT_PERSISTENT
&& !transient
)
3314 r
= user_config_home(dir
);
3316 r
= user_runtime_dir(dir
);
3323 if (mode
== UNIT_PERSISTENT
&& !transient
)
3324 *dir
= strdup("/etc/systemd/system");
3326 *dir
= strdup("/run/systemd/system");
3333 int unit_write_drop_in(Unit
*u
, UnitSetPropertiesMode mode
, const char *name
, const char *data
) {
3335 _cleanup_free_
char *dir
= NULL
, *p
= NULL
, *q
= NULL
;
3340 if (!IN_SET(mode
, UNIT_PERSISTENT
, UNIT_RUNTIME
))
3343 r
= unit_drop_in_dir(u
, mode
, u
->transient
, &dir
);
3347 r
= write_drop_in(dir
, u
->id
, 50, name
, data
);
3351 r
= drop_in_file(dir
, u
->id
, 50, name
, &p
, &q
);
3355 r
= strv_extend(&u
->dropin_paths
, q
);
3359 strv_sort(u
->dropin_paths
);
3360 strv_uniq(u
->dropin_paths
);
3362 u
->dropin_mtime
= now(CLOCK_REALTIME
);
3367 int unit_write_drop_in_format(Unit
*u
, UnitSetPropertiesMode mode
, const char *name
, const char *format
, ...) {
3368 _cleanup_free_
char *p
= NULL
;
3376 if (!IN_SET(mode
, UNIT_PERSISTENT
, UNIT_RUNTIME
))
3379 va_start(ap
, format
);
3380 r
= vasprintf(&p
, format
, ap
);
3386 return unit_write_drop_in(u
, mode
, name
, p
);
3389 int unit_write_drop_in_private(Unit
*u
, UnitSetPropertiesMode mode
, const char *name
, const char *data
) {
3390 _cleanup_free_
char *ndata
= NULL
;
3396 if (!UNIT_VTABLE(u
)->private_section
)
3399 if (!IN_SET(mode
, UNIT_PERSISTENT
, UNIT_RUNTIME
))
3402 ndata
= strjoin("[", UNIT_VTABLE(u
)->private_section
, "]\n", data
, NULL
);
3406 return unit_write_drop_in(u
, mode
, name
, ndata
);
3409 int unit_write_drop_in_private_format(Unit
*u
, UnitSetPropertiesMode mode
, const char *name
, const char *format
, ...) {
3410 _cleanup_free_
char *p
= NULL
;
3418 if (!IN_SET(mode
, UNIT_PERSISTENT
, UNIT_RUNTIME
))
3421 va_start(ap
, format
);
3422 r
= vasprintf(&p
, format
, ap
);
3428 return unit_write_drop_in_private(u
, mode
, name
, p
);
3431 int unit_make_transient(Unit
*u
) {
3434 if (!UNIT_VTABLE(u
)->can_transient
)
3437 u
->load_state
= UNIT_STUB
;
3439 u
->transient
= true;
3440 u
->fragment_path
= mfree(u
->fragment_path
);
3445 int unit_kill_context(
3451 bool main_pid_alien
) {
3453 bool wait_for_exit
= false;
3459 if (c
->kill_mode
== KILL_NONE
)
3469 case KILL_TERMINATE
:
3470 sig
= c
->kill_signal
;
3473 assert_not_reached("KillOperation unknown");
3477 r
= kill_and_sigcont(main_pid
, sig
);
3479 if (r
< 0 && r
!= -ESRCH
) {
3480 _cleanup_free_
char *comm
= NULL
;
3481 get_process_comm(main_pid
, &comm
);
3483 log_unit_warning_errno(u
, r
, "Failed to kill main process " PID_FMT
" (%s), ignoring: %m", main_pid
, strna(comm
));
3485 if (!main_pid_alien
)
3486 wait_for_exit
= true;
3488 if (c
->send_sighup
&& k
== KILL_TERMINATE
)
3489 (void) kill(main_pid
, SIGHUP
);
3493 if (control_pid
> 0) {
3494 r
= kill_and_sigcont(control_pid
, sig
);
3496 if (r
< 0 && r
!= -ESRCH
) {
3497 _cleanup_free_
char *comm
= NULL
;
3498 get_process_comm(control_pid
, &comm
);
3500 log_unit_warning_errno(u
, r
, "Failed to kill control process " PID_FMT
" (%s), ignoring: %m", control_pid
, strna(comm
));
3502 wait_for_exit
= true;
3504 if (c
->send_sighup
&& k
== KILL_TERMINATE
)
3505 (void) kill(control_pid
, SIGHUP
);
3509 if (u
->cgroup_path
&&
3510 (c
->kill_mode
== KILL_CONTROL_GROUP
|| (c
->kill_mode
== KILL_MIXED
&& k
== KILL_KILL
))) {
3511 _cleanup_set_free_ Set
*pid_set
= NULL
;
3513 /* Exclude the main/control pids from being killed via the cgroup */
3514 pid_set
= unit_pid_set(main_pid
, control_pid
);
3518 r
= cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER
, u
->cgroup_path
, sig
, true, k
!= KILL_TERMINATE
, false, pid_set
);
3520 if (r
!= -EAGAIN
&& r
!= -ESRCH
&& r
!= -ENOENT
)
3521 log_unit_warning_errno(u
, r
, "Failed to kill control group %s, ignoring: %m", u
->cgroup_path
);
3525 /* FIXME: For now, on the legacy hierarchy, we
3526 * will not wait for the cgroup members to die
3527 * if we are running in a container or if this
3528 * is a delegation unit, simply because cgroup
3529 * notification is unreliable in these
3530 * cases. It doesn't work at all in
3531 * containers, and outside of containers it
3532 * can be confused easily by left-over
3533 * directories in the cgroup -- which however
3534 * should not exist in non-delegated units. On
3535 * the unified hierarchy that's different,
3536 * there we get proper events. Hence rely on
3539 if (cg_unified() > 0 ||
3540 (detect_container() == 0 && !unit_cgroup_delegate(u
)))
3541 wait_for_exit
= true;
3543 if (c
->send_sighup
&& k
!= KILL_KILL
) {
3546 pid_set
= unit_pid_set(main_pid
, control_pid
);
3550 cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER
, u
->cgroup_path
, SIGHUP
, false, true, false, pid_set
);
3555 return wait_for_exit
;
3558 int unit_require_mounts_for(Unit
*u
, const char *path
) {
3559 char prefix
[strlen(path
) + 1], *p
;
3565 /* Registers a unit for requiring a certain path and all its
3566 * prefixes. We keep a simple array of these paths in the
3567 * unit, since its usually short. However, we build a prefix
3568 * table for all possible prefixes so that new appearing mount
3569 * units can easily determine which units to make themselves a
3572 if (!path_is_absolute(path
))
3579 path_kill_slashes(p
);
3581 if (!path_is_safe(p
)) {
3586 if (strv_contains(u
->requires_mounts_for
, p
)) {
3591 r
= strv_consume(&u
->requires_mounts_for
, p
);
3595 PATH_FOREACH_PREFIX_MORE(prefix
, p
) {
3598 x
= hashmap_get(u
->manager
->units_requiring_mounts_for
, prefix
);
3602 r
= hashmap_ensure_allocated(&u
->manager
->units_requiring_mounts_for
, &string_hash_ops
);
3616 r
= hashmap_put(u
->manager
->units_requiring_mounts_for
, q
, x
);
3632 int unit_setup_exec_runtime(Unit
*u
) {
3638 offset
= UNIT_VTABLE(u
)->exec_runtime_offset
;
3641 /* Check if there already is an ExecRuntime for this unit? */
3642 rt
= (ExecRuntime
**) ((uint8_t*) u
+ offset
);
3646 /* Try to get it from somebody else */
3647 SET_FOREACH(other
, u
->dependencies
[UNIT_JOINS_NAMESPACE_OF
], i
) {
3649 *rt
= unit_get_exec_runtime(other
);
3651 exec_runtime_ref(*rt
);
3656 return exec_runtime_make(rt
, unit_get_exec_context(u
), u
->id
);
3659 bool unit_type_supported(UnitType t
) {
3660 if (_unlikely_(t
< 0))
3662 if (_unlikely_(t
>= _UNIT_TYPE_MAX
))
3665 if (!unit_vtable
[t
]->supported
)
3668 return unit_vtable
[t
]->supported();
3671 void unit_warn_if_dir_nonempty(Unit
*u
, const char* where
) {
3677 r
= dir_is_empty(where
);
3681 log_unit_warning_errno(u
, r
, "Failed to check directory %s: %m", where
);
3685 log_struct(LOG_NOTICE
,
3686 LOG_MESSAGE_ID(SD_MESSAGE_OVERMOUNTING
),
3688 LOG_UNIT_MESSAGE(u
, "Directory %s to mount over is not empty, mounting anyway.", where
),
3693 int unit_fail_if_symlink(Unit
*u
, const char* where
) {
3699 r
= is_symlink(where
);
3701 log_unit_debug_errno(u
, r
, "Failed to check symlink %s, ignoring: %m", where
);
3708 LOG_MESSAGE_ID(SD_MESSAGE_OVERMOUNTING
),
3710 LOG_UNIT_MESSAGE(u
, "Mount on symlink %s not allowed.", where
),