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 "parse-util.h"
48 #include "path-util.h"
49 #include "process-util.h"
52 #include "string-util.h"
54 #include "unit-name.h"
56 #include "user-util.h"
59 const UnitVTable
* const unit_vtable
[_UNIT_TYPE_MAX
] = {
60 [UNIT_SERVICE
] = &service_vtable
,
61 [UNIT_SOCKET
] = &socket_vtable
,
62 [UNIT_BUSNAME
] = &busname_vtable
,
63 [UNIT_TARGET
] = &target_vtable
,
64 [UNIT_SNAPSHOT
] = &snapshot_vtable
,
65 [UNIT_DEVICE
] = &device_vtable
,
66 [UNIT_MOUNT
] = &mount_vtable
,
67 [UNIT_AUTOMOUNT
] = &automount_vtable
,
68 [UNIT_SWAP
] = &swap_vtable
,
69 [UNIT_TIMER
] = &timer_vtable
,
70 [UNIT_PATH
] = &path_vtable
,
71 [UNIT_SLICE
] = &slice_vtable
,
72 [UNIT_SCOPE
] = &scope_vtable
75 static void maybe_warn_about_dependency(Unit
*u
, const char *other
, UnitDependency dependency
);
77 Unit
*unit_new(Manager
*m
, size_t size
) {
81 assert(size
>= sizeof(Unit
));
87 u
->names
= set_new(&string_hash_ops
);
94 u
->type
= _UNIT_TYPE_INVALID
;
95 u
->default_dependencies
= true;
96 u
->unit_file_state
= _UNIT_FILE_STATE_INVALID
;
97 u
->unit_file_preset
= -1;
98 u
->on_failure_job_mode
= JOB_REPLACE
;
99 u
->cgroup_inotify_wd
= -1;
101 RATELIMIT_INIT(u
->auto_stop_ratelimit
, 10 * USEC_PER_SEC
, 16);
106 bool unit_has_name(Unit
*u
, const char *name
) {
110 return !!set_get(u
->names
, (char*) name
);
113 static void unit_init(Unit
*u
) {
120 assert(u
->type
>= 0);
122 cc
= unit_get_cgroup_context(u
);
124 cgroup_context_init(cc
);
126 /* Copy in the manager defaults into the cgroup
127 * context, _before_ the rest of the settings have
128 * been initialized */
130 cc
->cpu_accounting
= u
->manager
->default_cpu_accounting
;
131 cc
->blockio_accounting
= u
->manager
->default_blockio_accounting
;
132 cc
->memory_accounting
= u
->manager
->default_memory_accounting
;
133 cc
->tasks_accounting
= u
->manager
->default_tasks_accounting
;
136 ec
= unit_get_exec_context(u
);
138 exec_context_init(ec
);
140 kc
= unit_get_kill_context(u
);
142 kill_context_init(kc
);
144 if (UNIT_VTABLE(u
)->init
)
145 UNIT_VTABLE(u
)->init(u
);
148 int unit_add_name(Unit
*u
, const char *text
) {
149 _cleanup_free_
char *s
= NULL
, *i
= NULL
;
156 if (unit_name_is_valid(text
, UNIT_NAME_TEMPLATE
)) {
161 r
= unit_name_replace_instance(text
, u
->instance
, &s
);
170 if (set_contains(u
->names
, s
))
172 if (hashmap_contains(u
->manager
->units
, s
))
175 if (!unit_name_is_valid(s
, UNIT_NAME_PLAIN
|UNIT_NAME_INSTANCE
))
178 t
= unit_name_to_type(s
);
182 if (u
->type
!= _UNIT_TYPE_INVALID
&& t
!= u
->type
)
185 r
= unit_name_to_instance(s
, &i
);
189 if (i
&& unit_vtable
[t
]->no_instances
)
192 /* Ensure that this unit is either instanced or not instanced,
193 * but not both. Note that we do allow names with different
194 * instance names however! */
195 if (u
->type
!= _UNIT_TYPE_INVALID
&& !u
->instance
!= !i
)
198 if (unit_vtable
[t
]->no_alias
&& !set_isempty(u
->names
))
201 if (hashmap_size(u
->manager
->units
) >= MANAGER_MAX_NAMES
)
204 r
= set_put(u
->names
, s
);
209 r
= hashmap_put(u
->manager
->units
, s
, u
);
211 (void) set_remove(u
->names
, s
);
215 if (u
->type
== _UNIT_TYPE_INVALID
) {
220 LIST_PREPEND(units_by_type
, u
->manager
->units_by_type
[t
], u
);
229 unit_add_to_dbus_queue(u
);
233 int unit_choose_id(Unit
*u
, const char *name
) {
234 _cleanup_free_
char *t
= NULL
;
241 if (unit_name_is_valid(name
, UNIT_NAME_TEMPLATE
)) {
246 r
= unit_name_replace_instance(name
, u
->instance
, &t
);
253 /* Selects one of the names of this unit as the id */
254 s
= set_get(u
->names
, (char*) name
);
258 /* Determine the new instance from the new id */
259 r
= unit_name_to_instance(s
, &i
);
268 unit_add_to_dbus_queue(u
);
273 int unit_set_description(Unit
*u
, const char *description
) {
278 if (isempty(description
))
281 s
= strdup(description
);
286 free(u
->description
);
289 unit_add_to_dbus_queue(u
);
293 bool unit_check_gc(Unit
*u
) {
294 UnitActiveState state
;
303 state
= unit_active_state(u
);
305 /* If the unit is inactive and failed and no job is queued for
306 * it, then release its runtime resources */
307 if (UNIT_IS_INACTIVE_OR_FAILED(state
) &&
308 UNIT_VTABLE(u
)->release_resources
)
309 UNIT_VTABLE(u
)->release_resources(u
);
311 /* But we keep the unit object around for longer when it is
312 * referenced or configured to not be gc'ed */
313 if (state
!= UNIT_INACTIVE
)
316 if (UNIT_VTABLE(u
)->no_gc
)
325 if (UNIT_VTABLE(u
)->check_gc
)
326 if (UNIT_VTABLE(u
)->check_gc(u
))
332 void unit_add_to_load_queue(Unit
*u
) {
334 assert(u
->type
!= _UNIT_TYPE_INVALID
);
336 if (u
->load_state
!= UNIT_STUB
|| u
->in_load_queue
)
339 LIST_PREPEND(load_queue
, u
->manager
->load_queue
, u
);
340 u
->in_load_queue
= true;
343 void unit_add_to_cleanup_queue(Unit
*u
) {
346 if (u
->in_cleanup_queue
)
349 LIST_PREPEND(cleanup_queue
, u
->manager
->cleanup_queue
, u
);
350 u
->in_cleanup_queue
= true;
353 void unit_add_to_gc_queue(Unit
*u
) {
356 if (u
->in_gc_queue
|| u
->in_cleanup_queue
)
359 if (unit_check_gc(u
))
362 LIST_PREPEND(gc_queue
, u
->manager
->gc_queue
, u
);
363 u
->in_gc_queue
= true;
365 u
->manager
->n_in_gc_queue
++;
368 void unit_add_to_dbus_queue(Unit
*u
) {
370 assert(u
->type
!= _UNIT_TYPE_INVALID
);
372 if (u
->load_state
== UNIT_STUB
|| u
->in_dbus_queue
)
375 /* Shortcut things if nobody cares */
376 if (sd_bus_track_count(u
->manager
->subscribed
) <= 0 &&
377 set_isempty(u
->manager
->private_buses
)) {
378 u
->sent_dbus_new_signal
= true;
382 LIST_PREPEND(dbus_queue
, u
->manager
->dbus_unit_queue
, u
);
383 u
->in_dbus_queue
= true;
386 static void bidi_set_free(Unit
*u
, Set
*s
) {
392 /* Frees the set and makes sure we are dropped from the
393 * inverse pointers */
395 SET_FOREACH(other
, s
, i
) {
398 for (d
= 0; d
< _UNIT_DEPENDENCY_MAX
; d
++)
399 set_remove(other
->dependencies
[d
], u
);
401 unit_add_to_gc_queue(other
);
407 static void unit_remove_transient(Unit
*u
) {
415 if (u
->fragment_path
)
416 (void) unlink(u
->fragment_path
);
418 STRV_FOREACH(i
, u
->dropin_paths
) {
419 _cleanup_free_
char *p
= NULL
;
424 r
= path_get_parent(*i
, &p
);
430 static void unit_free_requires_mounts_for(Unit
*u
) {
433 STRV_FOREACH(j
, u
->requires_mounts_for
) {
434 char s
[strlen(*j
) + 1];
436 PATH_FOREACH_PREFIX_MORE(s
, *j
) {
440 x
= hashmap_get2(u
->manager
->units_requiring_mounts_for
, s
, (void**) &y
);
446 if (set_isempty(x
)) {
447 hashmap_remove(u
->manager
->units_requiring_mounts_for
, y
);
454 u
->requires_mounts_for
= strv_free(u
->requires_mounts_for
);
457 static void unit_done(Unit
*u
) {
467 if (UNIT_VTABLE(u
)->done
)
468 UNIT_VTABLE(u
)->done(u
);
470 ec
= unit_get_exec_context(u
);
472 exec_context_done(ec
);
474 cc
= unit_get_cgroup_context(u
);
476 cgroup_context_done(cc
);
478 r
= unit_remove_from_netclass_cgroup(u
);
480 log_warning_errno(r
, "Unable to remove unit from netclass group: %m");
483 void unit_free(Unit
*u
) {
490 if (u
->manager
->n_reloading
<= 0)
491 unit_remove_transient(u
);
493 bus_unit_send_removed_signal(u
);
497 sd_bus_slot_unref(u
->match_bus_slot
);
499 unit_free_requires_mounts_for(u
);
501 SET_FOREACH(t
, u
->names
, i
)
502 hashmap_remove_value(u
->manager
->units
, t
, u
);
516 for (d
= 0; d
< _UNIT_DEPENDENCY_MAX
; d
++)
517 bidi_set_free(u
, u
->dependencies
[d
]);
519 if (u
->type
!= _UNIT_TYPE_INVALID
)
520 LIST_REMOVE(units_by_type
, u
->manager
->units_by_type
[u
->type
], u
);
522 if (u
->in_load_queue
)
523 LIST_REMOVE(load_queue
, u
->manager
->load_queue
, u
);
525 if (u
->in_dbus_queue
)
526 LIST_REMOVE(dbus_queue
, u
->manager
->dbus_unit_queue
, u
);
528 if (u
->in_cleanup_queue
)
529 LIST_REMOVE(cleanup_queue
, u
->manager
->cleanup_queue
, u
);
531 if (u
->in_gc_queue
) {
532 LIST_REMOVE(gc_queue
, u
->manager
->gc_queue
, u
);
533 u
->manager
->n_in_gc_queue
--;
536 if (u
->in_cgroup_queue
)
537 LIST_REMOVE(cgroup_queue
, u
->manager
->cgroup_queue
, u
);
539 unit_release_cgroup(u
);
541 (void) manager_update_failed_units(u
->manager
, u
, false);
542 set_remove(u
->manager
->startup_units
, u
);
544 free(u
->description
);
545 strv_free(u
->documentation
);
546 free(u
->fragment_path
);
547 free(u
->source_path
);
548 strv_free(u
->dropin_paths
);
551 free(u
->job_timeout_reboot_arg
);
553 set_free_free(u
->names
);
555 unit_unwatch_all_pids(u
);
557 condition_free_list(u
->conditions
);
558 condition_free_list(u
->asserts
);
560 unit_ref_unset(&u
->slice
);
563 unit_ref_unset(u
->refs
);
568 UnitActiveState
unit_active_state(Unit
*u
) {
571 if (u
->load_state
== UNIT_MERGED
)
572 return unit_active_state(unit_follow_merge(u
));
574 /* After a reload it might happen that a unit is not correctly
575 * loaded but still has a process around. That's why we won't
576 * shortcut failed loading to UNIT_INACTIVE_FAILED. */
578 return UNIT_VTABLE(u
)->active_state(u
);
581 const char* unit_sub_state_to_string(Unit
*u
) {
584 return UNIT_VTABLE(u
)->sub_state_to_string(u
);
587 static int complete_move(Set
**s
, Set
**other
) {
597 r
= set_move(*s
, *other
);
608 static int merge_names(Unit
*u
, Unit
*other
) {
616 r
= complete_move(&u
->names
, &other
->names
);
620 set_free_free(other
->names
);
624 SET_FOREACH(t
, u
->names
, i
)
625 assert_se(hashmap_replace(u
->manager
->units
, t
, u
) == 0);
630 static int reserve_dependencies(Unit
*u
, Unit
*other
, UnitDependency d
) {
635 assert(d
< _UNIT_DEPENDENCY_MAX
);
638 * If u does not have this dependency set allocated, there is no need
639 * to reserve anything. In that case other's set will be transferred
640 * as a whole to u by complete_move().
642 if (!u
->dependencies
[d
])
645 /* merge_dependencies() will skip a u-on-u dependency */
646 n_reserve
= set_size(other
->dependencies
[d
]) - !!set_get(other
->dependencies
[d
], u
);
648 return set_reserve(u
->dependencies
[d
], n_reserve
);
651 static void merge_dependencies(Unit
*u
, Unit
*other
, const char *other_id
, UnitDependency d
) {
658 assert(d
< _UNIT_DEPENDENCY_MAX
);
660 /* Fix backwards pointers */
661 SET_FOREACH(back
, other
->dependencies
[d
], i
) {
664 for (k
= 0; k
< _UNIT_DEPENDENCY_MAX
; k
++) {
665 /* Do not add dependencies between u and itself */
667 if (set_remove(back
->dependencies
[k
], other
))
668 maybe_warn_about_dependency(u
, other_id
, k
);
670 r
= set_remove_and_put(back
->dependencies
[k
], other
, u
);
672 set_remove(back
->dependencies
[k
], other
);
674 assert(r
>= 0 || r
== -ENOENT
);
679 /* Also do not move dependencies on u to itself */
680 back
= set_remove(other
->dependencies
[d
], u
);
682 maybe_warn_about_dependency(u
, other_id
, d
);
684 /* The move cannot fail. The caller must have performed a reservation. */
685 assert_se(complete_move(&u
->dependencies
[d
], &other
->dependencies
[d
]) == 0);
687 other
->dependencies
[d
] = set_free(other
->dependencies
[d
]);
690 int unit_merge(Unit
*u
, Unit
*other
) {
692 const char *other_id
= NULL
;
697 assert(u
->manager
== other
->manager
);
698 assert(u
->type
!= _UNIT_TYPE_INVALID
);
700 other
= unit_follow_merge(other
);
705 if (u
->type
!= other
->type
)
708 if (!u
->instance
!= !other
->instance
)
711 if (other
->load_state
!= UNIT_STUB
&&
712 other
->load_state
!= UNIT_NOT_FOUND
)
721 if (!UNIT_IS_INACTIVE_OR_FAILED(unit_active_state(other
)))
725 other_id
= strdupa(other
->id
);
727 /* Make reservations to ensure merge_dependencies() won't fail */
728 for (d
= 0; d
< _UNIT_DEPENDENCY_MAX
; d
++) {
729 r
= reserve_dependencies(u
, other
, d
);
731 * We don't rollback reservations if we fail. We don't have
732 * a way to undo reservations. A reservation is not a leak.
739 r
= merge_names(u
, other
);
743 /* Redirect all references */
745 unit_ref_set(other
->refs
, u
);
747 /* Merge dependencies */
748 for (d
= 0; d
< _UNIT_DEPENDENCY_MAX
; d
++)
749 merge_dependencies(u
, other
, other_id
, d
);
751 other
->load_state
= UNIT_MERGED
;
752 other
->merged_into
= u
;
754 /* If there is still some data attached to the other node, we
755 * don't need it anymore, and can free it. */
756 if (other
->load_state
!= UNIT_STUB
)
757 if (UNIT_VTABLE(other
)->done
)
758 UNIT_VTABLE(other
)->done(other
);
760 unit_add_to_dbus_queue(u
);
761 unit_add_to_cleanup_queue(other
);
766 int unit_merge_by_name(Unit
*u
, const char *name
) {
769 _cleanup_free_
char *s
= NULL
;
774 if (unit_name_is_valid(name
, UNIT_NAME_TEMPLATE
)) {
778 r
= unit_name_replace_instance(name
, u
->instance
, &s
);
785 other
= manager_get_unit(u
->manager
, name
);
787 return unit_merge(u
, other
);
789 return unit_add_name(u
, name
);
792 Unit
* unit_follow_merge(Unit
*u
) {
795 while (u
->load_state
== UNIT_MERGED
)
796 assert_se(u
= u
->merged_into
);
801 int unit_add_exec_dependencies(Unit
*u
, ExecContext
*c
) {
807 if (c
->working_directory
) {
808 r
= unit_require_mounts_for(u
, c
->working_directory
);
813 if (c
->root_directory
) {
814 r
= unit_require_mounts_for(u
, c
->root_directory
);
819 if (u
->manager
->running_as
!= MANAGER_SYSTEM
)
822 if (c
->private_tmp
) {
823 r
= unit_require_mounts_for(u
, "/tmp");
827 r
= unit_require_mounts_for(u
, "/var/tmp");
832 if (c
->std_output
!= EXEC_OUTPUT_KMSG
&&
833 c
->std_output
!= EXEC_OUTPUT_SYSLOG
&&
834 c
->std_output
!= EXEC_OUTPUT_JOURNAL
&&
835 c
->std_output
!= EXEC_OUTPUT_KMSG_AND_CONSOLE
&&
836 c
->std_output
!= EXEC_OUTPUT_SYSLOG_AND_CONSOLE
&&
837 c
->std_output
!= EXEC_OUTPUT_JOURNAL_AND_CONSOLE
&&
838 c
->std_error
!= EXEC_OUTPUT_KMSG
&&
839 c
->std_error
!= EXEC_OUTPUT_SYSLOG
&&
840 c
->std_error
!= EXEC_OUTPUT_JOURNAL
&&
841 c
->std_error
!= EXEC_OUTPUT_KMSG_AND_CONSOLE
&&
842 c
->std_error
!= EXEC_OUTPUT_JOURNAL_AND_CONSOLE
&&
843 c
->std_error
!= EXEC_OUTPUT_SYSLOG_AND_CONSOLE
)
846 /* If syslog or kernel logging is requested, make sure our own
847 * logging daemon is run first. */
849 r
= unit_add_dependency_by_name(u
, UNIT_AFTER
, SPECIAL_JOURNALD_SOCKET
, NULL
, true);
856 const char *unit_description(Unit
*u
) {
860 return u
->description
;
865 void unit_dump(Unit
*u
, FILE *f
, const char *prefix
) {
871 timestamp1
[FORMAT_TIMESTAMP_MAX
],
872 timestamp2
[FORMAT_TIMESTAMP_MAX
],
873 timestamp3
[FORMAT_TIMESTAMP_MAX
],
874 timestamp4
[FORMAT_TIMESTAMP_MAX
],
875 timespan
[FORMAT_TIMESPAN_MAX
];
877 _cleanup_set_free_ Set
*following_set
= NULL
;
881 assert(u
->type
>= 0);
883 prefix
= strempty(prefix
);
884 prefix2
= strjoina(prefix
, "\t");
888 "%s\tDescription: %s\n"
890 "%s\tUnit Load State: %s\n"
891 "%s\tUnit Active State: %s\n"
892 "%s\tInactive Exit Timestamp: %s\n"
893 "%s\tActive Enter Timestamp: %s\n"
894 "%s\tActive Exit Timestamp: %s\n"
895 "%s\tInactive Enter Timestamp: %s\n"
896 "%s\tGC Check Good: %s\n"
897 "%s\tNeed Daemon Reload: %s\n"
898 "%s\tTransient: %s\n"
901 "%s\tCGroup realized: %s\n"
902 "%s\tCGroup mask: 0x%x\n"
903 "%s\tCGroup members mask: 0x%x\n",
905 prefix
, unit_description(u
),
906 prefix
, strna(u
->instance
),
907 prefix
, unit_load_state_to_string(u
->load_state
),
908 prefix
, unit_active_state_to_string(unit_active_state(u
)),
909 prefix
, strna(format_timestamp(timestamp1
, sizeof(timestamp1
), u
->inactive_exit_timestamp
.realtime
)),
910 prefix
, strna(format_timestamp(timestamp2
, sizeof(timestamp2
), u
->active_enter_timestamp
.realtime
)),
911 prefix
, strna(format_timestamp(timestamp3
, sizeof(timestamp3
), u
->active_exit_timestamp
.realtime
)),
912 prefix
, strna(format_timestamp(timestamp4
, sizeof(timestamp4
), u
->inactive_enter_timestamp
.realtime
)),
913 prefix
, yes_no(unit_check_gc(u
)),
914 prefix
, yes_no(unit_need_daemon_reload(u
)),
915 prefix
, yes_no(u
->transient
),
916 prefix
, strna(unit_slice_name(u
)),
917 prefix
, strna(u
->cgroup_path
),
918 prefix
, yes_no(u
->cgroup_realized
),
919 prefix
, u
->cgroup_realized_mask
,
920 prefix
, u
->cgroup_members_mask
);
922 SET_FOREACH(t
, u
->names
, i
)
923 fprintf(f
, "%s\tName: %s\n", prefix
, t
);
925 STRV_FOREACH(j
, u
->documentation
)
926 fprintf(f
, "%s\tDocumentation: %s\n", prefix
, *j
);
928 following
= unit_following(u
);
930 fprintf(f
, "%s\tFollowing: %s\n", prefix
, following
->id
);
932 r
= unit_following_set(u
, &following_set
);
936 SET_FOREACH(other
, following_set
, i
)
937 fprintf(f
, "%s\tFollowing Set Member: %s\n", prefix
, other
->id
);
940 if (u
->fragment_path
)
941 fprintf(f
, "%s\tFragment Path: %s\n", prefix
, u
->fragment_path
);
944 fprintf(f
, "%s\tSource Path: %s\n", prefix
, u
->source_path
);
946 STRV_FOREACH(j
, u
->dropin_paths
)
947 fprintf(f
, "%s\tDropIn Path: %s\n", prefix
, *j
);
949 if (u
->job_timeout
> 0)
950 fprintf(f
, "%s\tJob Timeout: %s\n", prefix
, format_timespan(timespan
, sizeof(timespan
), u
->job_timeout
, 0));
952 if (u
->job_timeout_action
!= FAILURE_ACTION_NONE
)
953 fprintf(f
, "%s\tJob Timeout Action: %s\n", prefix
, failure_action_to_string(u
->job_timeout_action
));
955 if (u
->job_timeout_reboot_arg
)
956 fprintf(f
, "%s\tJob Timeout Reboot Argument: %s\n", prefix
, u
->job_timeout_reboot_arg
);
958 condition_dump_list(u
->conditions
, f
, prefix
, condition_type_to_string
);
959 condition_dump_list(u
->asserts
, f
, prefix
, assert_type_to_string
);
961 if (dual_timestamp_is_set(&u
->condition_timestamp
))
963 "%s\tCondition Timestamp: %s\n"
964 "%s\tCondition Result: %s\n",
965 prefix
, strna(format_timestamp(timestamp1
, sizeof(timestamp1
), u
->condition_timestamp
.realtime
)),
966 prefix
, yes_no(u
->condition_result
));
968 if (dual_timestamp_is_set(&u
->assert_timestamp
))
970 "%s\tAssert Timestamp: %s\n"
971 "%s\tAssert Result: %s\n",
972 prefix
, strna(format_timestamp(timestamp1
, sizeof(timestamp1
), u
->assert_timestamp
.realtime
)),
973 prefix
, yes_no(u
->assert_result
));
975 for (d
= 0; d
< _UNIT_DEPENDENCY_MAX
; d
++) {
978 SET_FOREACH(other
, u
->dependencies
[d
], i
)
979 fprintf(f
, "%s\t%s: %s\n", prefix
, unit_dependency_to_string(d
), other
->id
);
982 if (!strv_isempty(u
->requires_mounts_for
)) {
984 "%s\tRequiresMountsFor:", prefix
);
986 STRV_FOREACH(j
, u
->requires_mounts_for
)
987 fprintf(f
, " %s", *j
);
992 if (u
->load_state
== UNIT_LOADED
) {
995 "%s\tStopWhenUnneeded: %s\n"
996 "%s\tRefuseManualStart: %s\n"
997 "%s\tRefuseManualStop: %s\n"
998 "%s\tDefaultDependencies: %s\n"
999 "%s\tOnFailureJobMode: %s\n"
1000 "%s\tIgnoreOnIsolate: %s\n"
1001 "%s\tIgnoreOnSnapshot: %s\n",
1002 prefix
, yes_no(u
->stop_when_unneeded
),
1003 prefix
, yes_no(u
->refuse_manual_start
),
1004 prefix
, yes_no(u
->refuse_manual_stop
),
1005 prefix
, yes_no(u
->default_dependencies
),
1006 prefix
, job_mode_to_string(u
->on_failure_job_mode
),
1007 prefix
, yes_no(u
->ignore_on_isolate
),
1008 prefix
, yes_no(u
->ignore_on_snapshot
));
1010 if (UNIT_VTABLE(u
)->dump
)
1011 UNIT_VTABLE(u
)->dump(u
, f
, prefix2
);
1013 } else if (u
->load_state
== UNIT_MERGED
)
1015 "%s\tMerged into: %s\n",
1016 prefix
, u
->merged_into
->id
);
1017 else if (u
->load_state
== UNIT_ERROR
)
1018 fprintf(f
, "%s\tLoad Error Code: %s\n", prefix
, strerror(-u
->load_error
));
1022 job_dump(u
->job
, f
, prefix2
);
1025 job_dump(u
->nop_job
, f
, prefix2
);
1029 /* Common implementation for multiple backends */
1030 int unit_load_fragment_and_dropin(Unit
*u
) {
1035 /* Load a .{service,socket,...} file */
1036 r
= unit_load_fragment(u
);
1040 if (u
->load_state
== UNIT_STUB
)
1043 /* Load drop-in directory data */
1044 r
= unit_load_dropin(unit_follow_merge(u
));
1051 /* Common implementation for multiple backends */
1052 int unit_load_fragment_and_dropin_optional(Unit
*u
) {
1057 /* Same as unit_load_fragment_and_dropin(), but whether
1058 * something can be loaded or not doesn't matter. */
1060 /* Load a .service file */
1061 r
= unit_load_fragment(u
);
1065 if (u
->load_state
== UNIT_STUB
)
1066 u
->load_state
= UNIT_LOADED
;
1068 /* Load drop-in directory data */
1069 r
= unit_load_dropin(unit_follow_merge(u
));
1076 int unit_add_default_target_dependency(Unit
*u
, Unit
*target
) {
1080 if (target
->type
!= UNIT_TARGET
)
1083 /* Only add the dependency if both units are loaded, so that
1084 * that loop check below is reliable */
1085 if (u
->load_state
!= UNIT_LOADED
||
1086 target
->load_state
!= UNIT_LOADED
)
1089 /* If either side wants no automatic dependencies, then let's
1091 if (!u
->default_dependencies
||
1092 !target
->default_dependencies
)
1095 /* Don't create loops */
1096 if (set_get(target
->dependencies
[UNIT_BEFORE
], u
))
1099 return unit_add_dependency(target
, UNIT_AFTER
, u
, true);
1102 static int unit_add_target_dependencies(Unit
*u
) {
1104 static const UnitDependency deps
[] = {
1106 UNIT_REQUIRED_BY_OVERRIDABLE
,
1108 UNIT_REQUISITE_OF_OVERRIDABLE
,
1120 for (k
= 0; k
< ELEMENTSOF(deps
); k
++)
1121 SET_FOREACH(target
, u
->dependencies
[deps
[k
]], i
) {
1122 r
= unit_add_default_target_dependency(u
, target
);
1130 static int unit_add_slice_dependencies(Unit
*u
) {
1133 if (!UNIT_HAS_CGROUP_CONTEXT(u
))
1136 if (UNIT_ISSET(u
->slice
))
1137 return unit_add_two_dependencies(u
, UNIT_AFTER
, UNIT_REQUIRES
, UNIT_DEREF(u
->slice
), true);
1139 if (unit_has_name(u
, SPECIAL_ROOT_SLICE
))
1142 return unit_add_two_dependencies_by_name(u
, UNIT_AFTER
, UNIT_REQUIRES
, SPECIAL_ROOT_SLICE
, NULL
, true);
1145 static int unit_add_mount_dependencies(Unit
*u
) {
1151 STRV_FOREACH(i
, u
->requires_mounts_for
) {
1152 char prefix
[strlen(*i
) + 1];
1154 PATH_FOREACH_PREFIX_MORE(prefix
, *i
) {
1155 _cleanup_free_
char *p
= NULL
;
1158 r
= unit_name_from_path(prefix
, ".mount", &p
);
1162 m
= manager_get_unit(u
->manager
, p
);
1164 /* Make sure to load the mount unit if
1165 * it exists. If so the dependencies
1166 * on this unit will be added later
1167 * during the loading of the mount
1169 (void) manager_load_unit_prepare(u
->manager
, p
, NULL
, NULL
, &m
);
1175 if (m
->load_state
!= UNIT_LOADED
)
1178 r
= unit_add_dependency(u
, UNIT_AFTER
, m
, true);
1182 if (m
->fragment_path
) {
1183 r
= unit_add_dependency(u
, UNIT_REQUIRES
, m
, true);
1193 static int unit_add_startup_units(Unit
*u
) {
1197 c
= unit_get_cgroup_context(u
);
1201 if (c
->startup_cpu_shares
== CGROUP_CPU_SHARES_INVALID
&&
1202 c
->startup_blockio_weight
== CGROUP_BLKIO_WEIGHT_INVALID
)
1205 r
= set_ensure_allocated(&u
->manager
->startup_units
, NULL
);
1209 return set_put(u
->manager
->startup_units
, u
);
1212 int unit_load(Unit
*u
) {
1217 if (u
->in_load_queue
) {
1218 LIST_REMOVE(load_queue
, u
->manager
->load_queue
, u
);
1219 u
->in_load_queue
= false;
1222 if (u
->type
== _UNIT_TYPE_INVALID
)
1225 if (u
->load_state
!= UNIT_STUB
)
1228 if (UNIT_VTABLE(u
)->load
) {
1229 r
= UNIT_VTABLE(u
)->load(u
);
1234 if (u
->load_state
== UNIT_STUB
) {
1239 if (u
->load_state
== UNIT_LOADED
) {
1241 r
= unit_add_target_dependencies(u
);
1245 r
= unit_add_slice_dependencies(u
);
1249 r
= unit_add_mount_dependencies(u
);
1253 r
= unit_add_startup_units(u
);
1257 if (u
->on_failure_job_mode
== JOB_ISOLATE
&& set_size(u
->dependencies
[UNIT_ON_FAILURE
]) > 1) {
1258 log_unit_error(u
, "More than one OnFailure= dependencies specified but OnFailureJobMode=isolate set. Refusing.");
1263 unit_update_cgroup_members_masks(u
);
1265 /* If we are reloading, we need to wait for the deserializer
1266 * to restore the net_cls ids that have been set previously */
1267 if (u
->manager
->n_reloading
<= 0) {
1268 r
= unit_add_to_netclass_cgroup(u
);
1274 assert((u
->load_state
!= UNIT_MERGED
) == !u
->merged_into
);
1276 unit_add_to_dbus_queue(unit_follow_merge(u
));
1277 unit_add_to_gc_queue(u
);
1282 u
->load_state
= u
->load_state
== UNIT_STUB
? UNIT_NOT_FOUND
: UNIT_ERROR
;
1284 unit_add_to_dbus_queue(u
);
1285 unit_add_to_gc_queue(u
);
1287 log_unit_debug_errno(u
, r
, "Failed to load configuration: %m");
1292 static bool unit_condition_test_list(Unit
*u
, Condition
*first
, const char *(*to_string
)(ConditionType t
)) {
1299 /* If the condition list is empty, then it is true */
1303 /* Otherwise, if all of the non-trigger conditions apply and
1304 * if any of the trigger conditions apply (unless there are
1305 * none) we return true */
1306 LIST_FOREACH(conditions
, c
, first
) {
1309 r
= condition_test(c
);
1312 "Couldn't determine result for %s=%s%s%s, assuming failed: %m",
1314 c
->trigger
? "|" : "",
1315 c
->negate
? "!" : "",
1321 c
->trigger
? "|" : "",
1322 c
->negate
? "!" : "",
1324 condition_result_to_string(c
->result
));
1326 if (!c
->trigger
&& r
<= 0)
1329 if (c
->trigger
&& triggered
<= 0)
1333 return triggered
!= 0;
1336 static bool unit_condition_test(Unit
*u
) {
1339 dual_timestamp_get(&u
->condition_timestamp
);
1340 u
->condition_result
= unit_condition_test_list(u
, u
->conditions
, condition_type_to_string
);
1342 return u
->condition_result
;
1345 static bool unit_assert_test(Unit
*u
) {
1348 dual_timestamp_get(&u
->assert_timestamp
);
1349 u
->assert_result
= unit_condition_test_list(u
, u
->asserts
, assert_type_to_string
);
1351 return u
->assert_result
;
1354 _pure_
static const char* unit_get_status_message_format(Unit
*u
, JobType t
) {
1356 const UnitStatusMessageFormats
*format_table
;
1359 assert(t
== JOB_START
|| t
== JOB_STOP
|| t
== JOB_RELOAD
);
1361 if (t
!= JOB_RELOAD
) {
1362 format_table
= &UNIT_VTABLE(u
)->status_message_formats
;
1364 format
= format_table
->starting_stopping
[t
== JOB_STOP
];
1370 /* Return generic strings */
1372 return "Starting %s.";
1373 else if (t
== JOB_STOP
)
1374 return "Stopping %s.";
1376 return "Reloading %s.";
1379 static void unit_status_print_starting_stopping(Unit
*u
, JobType t
) {
1384 format
= unit_get_status_message_format(u
, t
);
1386 DISABLE_WARNING_FORMAT_NONLITERAL
;
1387 unit_status_printf(u
, "", format
);
1391 static void unit_status_log_starting_stopping_reloading(Unit
*u
, JobType t
) {
1398 if (t
!= JOB_START
&& t
!= JOB_STOP
&& t
!= JOB_RELOAD
)
1401 if (log_on_console())
1404 /* We log status messages for all units and all operations. */
1406 format
= unit_get_status_message_format(u
, t
);
1408 DISABLE_WARNING_FORMAT_NONLITERAL
;
1409 snprintf(buf
, sizeof(buf
), format
, unit_description(u
));
1412 mid
= t
== JOB_START
? SD_MESSAGE_UNIT_STARTING
:
1413 t
== JOB_STOP
? SD_MESSAGE_UNIT_STOPPING
:
1414 SD_MESSAGE_UNIT_RELOADING
;
1416 /* Note that we deliberately use LOG_MESSAGE() instead of
1417 * LOG_UNIT_MESSAGE() here, since this is supposed to mimic
1418 * closely what is written to screen using the status output,
1419 * which is supposed the highest level, friendliest output
1420 * possible, which means we should avoid the low-level unit
1422 log_struct(LOG_INFO
,
1423 LOG_MESSAGE_ID(mid
),
1425 LOG_MESSAGE("%s", buf
),
1429 void unit_status_emit_starting_stopping_reloading(Unit
*u
, JobType t
) {
1431 unit_status_log_starting_stopping_reloading(u
, t
);
1433 /* Reload status messages have traditionally not been printed to console. */
1434 if (t
!= JOB_RELOAD
)
1435 unit_status_print_starting_stopping(u
, t
);
1439 * -EBADR: This unit type does not support starting.
1440 * -EALREADY: Unit is already started.
1441 * -EAGAIN: An operation is already in progress. Retry later.
1442 * -ECANCELED: Too many requests for now.
1443 * -EPROTO: Assert failed
1445 int unit_start(Unit
*u
) {
1446 UnitActiveState state
;
1451 /* Units that aren't loaded cannot be started */
1452 if (u
->load_state
!= UNIT_LOADED
)
1455 /* If this is already started, then this will succeed. Note
1456 * that this will even succeed if this unit is not startable
1457 * by the user. This is relied on to detect when we need to
1458 * wait for units and when waiting is finished. */
1459 state
= unit_active_state(u
);
1460 if (UNIT_IS_ACTIVE_OR_RELOADING(state
))
1463 /* If the conditions failed, don't do anything at all. If we
1464 * already are activating this call might still be useful to
1465 * speed up activation in case there is some hold-off time,
1466 * but we don't want to recheck the condition in that case. */
1467 if (state
!= UNIT_ACTIVATING
&&
1468 !unit_condition_test(u
)) {
1469 log_unit_debug(u
, "Starting requested but condition failed. Not starting unit.");
1473 /* If the asserts failed, fail the entire job */
1474 if (state
!= UNIT_ACTIVATING
&&
1475 !unit_assert_test(u
)) {
1476 log_unit_notice(u
, "Starting requested but asserts failed.");
1480 /* Units of types that aren't supported cannot be
1481 * started. Note that we do this test only after the condition
1482 * checks, so that we rather return condition check errors
1483 * (which are usually not considered a true failure) than "not
1484 * supported" errors (which are considered a failure).
1486 if (!unit_supported(u
))
1489 /* Forward to the main object, if we aren't it. */
1490 following
= unit_following(u
);
1492 log_unit_debug(u
, "Redirecting start request from %s to %s.", u
->id
, following
->id
);
1493 return unit_start(following
);
1496 /* If it is stopped, but we cannot start it, then fail */
1497 if (!UNIT_VTABLE(u
)->start
)
1500 /* We don't suppress calls to ->start() here when we are
1501 * already starting, to allow this request to be used as a
1502 * "hurry up" call, for example when the unit is in some "auto
1503 * restart" state where it waits for a holdoff timer to elapse
1504 * before it will start again. */
1506 unit_add_to_dbus_queue(u
);
1508 return UNIT_VTABLE(u
)->start(u
);
1511 bool unit_can_start(Unit
*u
) {
1514 if (u
->load_state
!= UNIT_LOADED
)
1517 if (!unit_supported(u
))
1520 return !!UNIT_VTABLE(u
)->start
;
1523 bool unit_can_isolate(Unit
*u
) {
1526 return unit_can_start(u
) &&
1531 * -EBADR: This unit type does not support stopping.
1532 * -EALREADY: Unit is already stopped.
1533 * -EAGAIN: An operation is already in progress. Retry later.
1535 int unit_stop(Unit
*u
) {
1536 UnitActiveState state
;
1541 state
= unit_active_state(u
);
1542 if (UNIT_IS_INACTIVE_OR_FAILED(state
))
1545 following
= unit_following(u
);
1547 log_unit_debug(u
, "Redirecting stop request from %s to %s.", u
->id
, following
->id
);
1548 return unit_stop(following
);
1551 if (!UNIT_VTABLE(u
)->stop
)
1554 unit_add_to_dbus_queue(u
);
1556 return UNIT_VTABLE(u
)->stop(u
);
1560 * -EBADR: This unit type does not support reloading.
1561 * -ENOEXEC: Unit is not started.
1562 * -EAGAIN: An operation is already in progress. Retry later.
1564 int unit_reload(Unit
*u
) {
1565 UnitActiveState state
;
1570 if (u
->load_state
!= UNIT_LOADED
)
1573 if (!unit_can_reload(u
))
1576 state
= unit_active_state(u
);
1577 if (state
== UNIT_RELOADING
)
1580 if (state
!= UNIT_ACTIVE
) {
1581 log_unit_warning(u
, "Unit cannot be reloaded because it is inactive.");
1585 following
= unit_following(u
);
1587 log_unit_debug(u
, "Redirecting reload request from %s to %s.", u
->id
, following
->id
);
1588 return unit_reload(following
);
1591 unit_add_to_dbus_queue(u
);
1593 return UNIT_VTABLE(u
)->reload(u
);
1596 bool unit_can_reload(Unit
*u
) {
1599 if (!UNIT_VTABLE(u
)->reload
)
1602 if (!UNIT_VTABLE(u
)->can_reload
)
1605 return UNIT_VTABLE(u
)->can_reload(u
);
1608 static void unit_check_unneeded(Unit
*u
) {
1610 static const UnitDependency needed_dependencies
[] = {
1612 UNIT_REQUIRED_BY_OVERRIDABLE
,
1614 UNIT_REQUISITE_OF_OVERRIDABLE
,
1626 /* If this service shall be shut down when unneeded then do
1629 if (!u
->stop_when_unneeded
)
1632 if (!UNIT_IS_ACTIVE_OR_ACTIVATING(unit_active_state(u
)))
1635 for (j
= 0; j
< ELEMENTSOF(needed_dependencies
); j
++)
1636 SET_FOREACH(other
, u
->dependencies
[needed_dependencies
[j
]], i
)
1637 if (unit_active_or_pending(other
))
1640 /* If stopping a unit fails continously we might enter a stop
1641 * loop here, hence stop acting on the service being
1642 * unnecessary after a while. */
1643 if (!ratelimit_test(&u
->auto_stop_ratelimit
)) {
1644 log_unit_warning(u
, "Unit not needed anymore, but not stopping since we tried this too often recently.");
1648 log_unit_info(u
, "Unit not needed anymore. Stopping.");
1650 /* Ok, nobody needs us anymore. Sniff. Then let's commit suicide */
1651 r
= manager_add_job(u
->manager
, JOB_STOP
, u
, JOB_FAIL
, true, NULL
, NULL
);
1653 log_unit_warning_errno(u
, r
, "Failed to enqueue stop job, ignoring: %m");
1656 static void unit_check_binds_to(Unit
*u
) {
1667 if (unit_active_state(u
) != UNIT_ACTIVE
)
1670 SET_FOREACH(other
, u
->dependencies
[UNIT_BINDS_TO
], i
) {
1674 if (!UNIT_IS_INACTIVE_OR_FAILED(unit_active_state(other
)))
1684 /* If stopping a unit fails continously we might enter a stop
1685 * loop here, hence stop acting on the service being
1686 * unnecessary after a while. */
1687 if (!ratelimit_test(&u
->auto_stop_ratelimit
)) {
1688 log_unit_warning(u
, "Unit is bound to inactive unit %s, but not stopping since we tried this too often recently.", other
->id
);
1693 log_unit_info(u
, "Unit is bound to inactive unit %s. Stopping, too.", other
->id
);
1695 /* A unit we need to run is gone. Sniff. Let's stop this. */
1696 r
= manager_add_job(u
->manager
, JOB_STOP
, u
, JOB_FAIL
, true, NULL
, NULL
);
1698 log_unit_warning_errno(u
, r
, "Failed to enqueue stop job, ignoring: %m");
1701 static void retroactively_start_dependencies(Unit
*u
) {
1706 assert(UNIT_IS_ACTIVE_OR_ACTIVATING(unit_active_state(u
)));
1708 SET_FOREACH(other
, u
->dependencies
[UNIT_REQUIRES
], i
)
1709 if (!set_get(u
->dependencies
[UNIT_AFTER
], other
) &&
1710 !UNIT_IS_ACTIVE_OR_ACTIVATING(unit_active_state(other
)))
1711 manager_add_job(u
->manager
, JOB_START
, other
, JOB_REPLACE
, true, NULL
, NULL
);
1713 SET_FOREACH(other
, u
->dependencies
[UNIT_BINDS_TO
], i
)
1714 if (!set_get(u
->dependencies
[UNIT_AFTER
], other
) &&
1715 !UNIT_IS_ACTIVE_OR_ACTIVATING(unit_active_state(other
)))
1716 manager_add_job(u
->manager
, JOB_START
, other
, JOB_REPLACE
, true, NULL
, NULL
);
1718 SET_FOREACH(other
, u
->dependencies
[UNIT_REQUIRES_OVERRIDABLE
], i
)
1719 if (!set_get(u
->dependencies
[UNIT_AFTER
], other
) &&
1720 !UNIT_IS_ACTIVE_OR_ACTIVATING(unit_active_state(other
)))
1721 manager_add_job(u
->manager
, JOB_START
, other
, JOB_FAIL
, false, NULL
, NULL
);
1723 SET_FOREACH(other
, u
->dependencies
[UNIT_WANTS
], i
)
1724 if (!set_get(u
->dependencies
[UNIT_AFTER
], other
) &&
1725 !UNIT_IS_ACTIVE_OR_ACTIVATING(unit_active_state(other
)))
1726 manager_add_job(u
->manager
, JOB_START
, other
, JOB_FAIL
, false, NULL
, NULL
);
1728 SET_FOREACH(other
, u
->dependencies
[UNIT_CONFLICTS
], i
)
1729 if (!UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(other
)))
1730 manager_add_job(u
->manager
, JOB_STOP
, other
, JOB_REPLACE
, true, NULL
, NULL
);
1732 SET_FOREACH(other
, u
->dependencies
[UNIT_CONFLICTED_BY
], i
)
1733 if (!UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(other
)))
1734 manager_add_job(u
->manager
, JOB_STOP
, other
, JOB_REPLACE
, true, NULL
, NULL
);
1737 static void retroactively_stop_dependencies(Unit
*u
) {
1742 assert(UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(u
)));
1744 /* Pull down units which are bound to us recursively if enabled */
1745 SET_FOREACH(other
, u
->dependencies
[UNIT_BOUND_BY
], i
)
1746 if (!UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(other
)))
1747 manager_add_job(u
->manager
, JOB_STOP
, other
, JOB_REPLACE
, true, NULL
, NULL
);
1750 static void check_unneeded_dependencies(Unit
*u
) {
1755 assert(UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(u
)));
1757 /* Garbage collect services that might not be needed anymore, if enabled */
1758 SET_FOREACH(other
, u
->dependencies
[UNIT_REQUIRES
], i
)
1759 if (!UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(other
)))
1760 unit_check_unneeded(other
);
1761 SET_FOREACH(other
, u
->dependencies
[UNIT_REQUIRES_OVERRIDABLE
], i
)
1762 if (!UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(other
)))
1763 unit_check_unneeded(other
);
1764 SET_FOREACH(other
, u
->dependencies
[UNIT_WANTS
], i
)
1765 if (!UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(other
)))
1766 unit_check_unneeded(other
);
1767 SET_FOREACH(other
, u
->dependencies
[UNIT_REQUISITE
], i
)
1768 if (!UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(other
)))
1769 unit_check_unneeded(other
);
1770 SET_FOREACH(other
, u
->dependencies
[UNIT_REQUISITE_OVERRIDABLE
], i
)
1771 if (!UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(other
)))
1772 unit_check_unneeded(other
);
1773 SET_FOREACH(other
, u
->dependencies
[UNIT_BINDS_TO
], i
)
1774 if (!UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(other
)))
1775 unit_check_unneeded(other
);
1778 void unit_start_on_failure(Unit
*u
) {
1784 if (set_size(u
->dependencies
[UNIT_ON_FAILURE
]) <= 0)
1787 log_unit_info(u
, "Triggering OnFailure= dependencies.");
1789 SET_FOREACH(other
, u
->dependencies
[UNIT_ON_FAILURE
], i
) {
1792 r
= manager_add_job(u
->manager
, JOB_START
, other
, u
->on_failure_job_mode
, true, NULL
, NULL
);
1794 log_unit_error_errno(u
, r
, "Failed to enqueue OnFailure= job: %m");
1798 void unit_trigger_notify(Unit
*u
) {
1804 SET_FOREACH(other
, u
->dependencies
[UNIT_TRIGGERED_BY
], i
)
1805 if (UNIT_VTABLE(other
)->trigger_notify
)
1806 UNIT_VTABLE(other
)->trigger_notify(other
, u
);
1809 void unit_notify(Unit
*u
, UnitActiveState os
, UnitActiveState ns
, bool reload_success
) {
1814 assert(os
< _UNIT_ACTIVE_STATE_MAX
);
1815 assert(ns
< _UNIT_ACTIVE_STATE_MAX
);
1817 /* Note that this is called for all low-level state changes,
1818 * even if they might map to the same high-level
1819 * UnitActiveState! That means that ns == os is an expected
1820 * behavior here. For example: if a mount point is remounted
1821 * this function will be called too! */
1825 /* Update timestamps for state changes */
1826 if (m
->n_reloading
<= 0) {
1829 dual_timestamp_get(&ts
);
1831 if (UNIT_IS_INACTIVE_OR_FAILED(os
) && !UNIT_IS_INACTIVE_OR_FAILED(ns
))
1832 u
->inactive_exit_timestamp
= ts
;
1833 else if (!UNIT_IS_INACTIVE_OR_FAILED(os
) && UNIT_IS_INACTIVE_OR_FAILED(ns
))
1834 u
->inactive_enter_timestamp
= ts
;
1836 if (!UNIT_IS_ACTIVE_OR_RELOADING(os
) && UNIT_IS_ACTIVE_OR_RELOADING(ns
))
1837 u
->active_enter_timestamp
= ts
;
1838 else if (UNIT_IS_ACTIVE_OR_RELOADING(os
) && !UNIT_IS_ACTIVE_OR_RELOADING(ns
))
1839 u
->active_exit_timestamp
= ts
;
1842 /* Keep track of failed units */
1843 (void) manager_update_failed_units(u
->manager
, u
, ns
== UNIT_FAILED
);
1845 /* Make sure the cgroup is always removed when we become inactive */
1846 if (UNIT_IS_INACTIVE_OR_FAILED(ns
))
1847 unit_prune_cgroup(u
);
1849 /* Note that this doesn't apply to RemainAfterExit services exiting
1850 * successfully, since there's no change of state in that case. Which is
1851 * why it is handled in service_set_state() */
1852 if (UNIT_IS_INACTIVE_OR_FAILED(os
) != UNIT_IS_INACTIVE_OR_FAILED(ns
)) {
1855 ec
= unit_get_exec_context(u
);
1856 if (ec
&& exec_context_may_touch_console(ec
)) {
1857 if (UNIT_IS_INACTIVE_OR_FAILED(ns
)) {
1860 if (m
->n_on_console
== 0)
1861 /* unset no_console_output flag, since the console is free */
1862 m
->no_console_output
= false;
1871 if (u
->job
->state
== JOB_WAITING
)
1873 /* So we reached a different state for this
1874 * job. Let's see if we can run it now if it
1875 * failed previously due to EAGAIN. */
1876 job_add_to_run_queue(u
->job
);
1878 /* Let's check whether this state change constitutes a
1879 * finished job, or maybe contradicts a running job and
1880 * hence needs to invalidate jobs. */
1882 switch (u
->job
->type
) {
1885 case JOB_VERIFY_ACTIVE
:
1887 if (UNIT_IS_ACTIVE_OR_RELOADING(ns
))
1888 job_finish_and_invalidate(u
->job
, JOB_DONE
, true);
1889 else if (u
->job
->state
== JOB_RUNNING
&& ns
!= UNIT_ACTIVATING
) {
1892 if (UNIT_IS_INACTIVE_OR_FAILED(ns
))
1893 job_finish_and_invalidate(u
->job
, ns
== UNIT_FAILED
? JOB_FAILED
: JOB_DONE
, true);
1899 case JOB_RELOAD_OR_START
:
1901 if (u
->job
->state
== JOB_RUNNING
) {
1902 if (ns
== UNIT_ACTIVE
)
1903 job_finish_and_invalidate(u
->job
, reload_success
? JOB_DONE
: JOB_FAILED
, true);
1904 else if (ns
!= UNIT_ACTIVATING
&& ns
!= UNIT_RELOADING
) {
1907 if (UNIT_IS_INACTIVE_OR_FAILED(ns
))
1908 job_finish_and_invalidate(u
->job
, ns
== UNIT_FAILED
? JOB_FAILED
: JOB_DONE
, true);
1916 case JOB_TRY_RESTART
:
1918 if (UNIT_IS_INACTIVE_OR_FAILED(ns
))
1919 job_finish_and_invalidate(u
->job
, JOB_DONE
, true);
1920 else if (u
->job
->state
== JOB_RUNNING
&& ns
!= UNIT_DEACTIVATING
) {
1922 job_finish_and_invalidate(u
->job
, JOB_FAILED
, true);
1928 assert_not_reached("Job type unknown");
1934 if (m
->n_reloading
<= 0) {
1936 /* If this state change happened without being
1937 * requested by a job, then let's retroactively start
1938 * or stop dependencies. We skip that step when
1939 * deserializing, since we don't want to create any
1940 * additional jobs just because something is already
1944 if (UNIT_IS_INACTIVE_OR_FAILED(os
) && UNIT_IS_ACTIVE_OR_ACTIVATING(ns
))
1945 retroactively_start_dependencies(u
);
1946 else if (UNIT_IS_ACTIVE_OR_ACTIVATING(os
) && UNIT_IS_INACTIVE_OR_DEACTIVATING(ns
))
1947 retroactively_stop_dependencies(u
);
1950 /* stop unneeded units regardless if going down was expected or not */
1951 if (UNIT_IS_INACTIVE_OR_DEACTIVATING(ns
))
1952 check_unneeded_dependencies(u
);
1954 if (ns
!= os
&& ns
== UNIT_FAILED
) {
1955 log_unit_notice(u
, "Unit entered failed state.");
1956 unit_start_on_failure(u
);
1960 /* Some names are special */
1961 if (UNIT_IS_ACTIVE_OR_RELOADING(ns
)) {
1963 if (unit_has_name(u
, SPECIAL_DBUS_SERVICE
))
1964 /* The bus might have just become available,
1965 * hence try to connect to it, if we aren't
1969 if (u
->type
== UNIT_SERVICE
&&
1970 !UNIT_IS_ACTIVE_OR_RELOADING(os
) &&
1971 m
->n_reloading
<= 0) {
1972 /* Write audit record if we have just finished starting up */
1973 manager_send_unit_audit(m
, u
, AUDIT_SERVICE_START
, true);
1977 if (!UNIT_IS_ACTIVE_OR_RELOADING(os
))
1978 manager_send_unit_plymouth(m
, u
);
1982 /* We don't care about D-Bus here, since we'll get an
1983 * asynchronous notification for it anyway. */
1985 if (u
->type
== UNIT_SERVICE
&&
1986 UNIT_IS_INACTIVE_OR_FAILED(ns
) &&
1987 !UNIT_IS_INACTIVE_OR_FAILED(os
) &&
1988 m
->n_reloading
<= 0) {
1990 /* Hmm, if there was no start record written
1991 * write it now, so that we always have a nice
1994 manager_send_unit_audit(m
, u
, AUDIT_SERVICE_START
, ns
== UNIT_INACTIVE
);
1996 if (ns
== UNIT_INACTIVE
)
1997 manager_send_unit_audit(m
, u
, AUDIT_SERVICE_STOP
, true);
1999 /* Write audit record if we have just finished shutting down */
2000 manager_send_unit_audit(m
, u
, AUDIT_SERVICE_STOP
, ns
== UNIT_INACTIVE
);
2002 u
->in_audit
= false;
2006 manager_recheck_journal(m
);
2007 unit_trigger_notify(u
);
2009 if (u
->manager
->n_reloading
<= 0) {
2010 /* Maybe we finished startup and are now ready for
2011 * being stopped because unneeded? */
2012 unit_check_unneeded(u
);
2014 /* Maybe we finished startup, but something we needed
2015 * has vanished? Let's die then. (This happens when
2016 * something BindsTo= to a Type=oneshot unit, as these
2017 * units go directly from starting to inactive,
2018 * without ever entering started.) */
2019 unit_check_binds_to(u
);
2022 unit_add_to_dbus_queue(u
);
2023 unit_add_to_gc_queue(u
);
2026 int unit_watch_pid(Unit
*u
, pid_t pid
) {
2032 /* Watch a specific PID. We only support one or two units
2033 * watching each PID for now, not more. */
2035 r
= set_ensure_allocated(&u
->pids
, NULL
);
2039 r
= hashmap_ensure_allocated(&u
->manager
->watch_pids1
, NULL
);
2043 r
= hashmap_put(u
->manager
->watch_pids1
, PID_TO_PTR(pid
), u
);
2045 r
= hashmap_ensure_allocated(&u
->manager
->watch_pids2
, NULL
);
2049 r
= hashmap_put(u
->manager
->watch_pids2
, PID_TO_PTR(pid
), u
);
2052 q
= set_put(u
->pids
, PID_TO_PTR(pid
));
2059 void unit_unwatch_pid(Unit
*u
, pid_t pid
) {
2063 (void) hashmap_remove_value(u
->manager
->watch_pids1
, PID_TO_PTR(pid
), u
);
2064 (void) hashmap_remove_value(u
->manager
->watch_pids2
, PID_TO_PTR(pid
), u
);
2065 (void) set_remove(u
->pids
, PID_TO_PTR(pid
));
2068 void unit_unwatch_all_pids(Unit
*u
) {
2071 while (!set_isempty(u
->pids
))
2072 unit_unwatch_pid(u
, PTR_TO_PID(set_first(u
->pids
)));
2074 u
->pids
= set_free(u
->pids
);
2077 void unit_tidy_watch_pids(Unit
*u
, pid_t except1
, pid_t except2
) {
2083 /* Cleans dead PIDs from our list */
2085 SET_FOREACH(e
, u
->pids
, i
) {
2086 pid_t pid
= PTR_TO_PID(e
);
2088 if (pid
== except1
|| pid
== except2
)
2091 if (!pid_is_unwaited(pid
))
2092 unit_unwatch_pid(u
, pid
);
2096 bool unit_job_is_applicable(Unit
*u
, JobType j
) {
2098 assert(j
>= 0 && j
< _JOB_TYPE_MAX
);
2102 case JOB_VERIFY_ACTIVE
:
2109 case JOB_TRY_RESTART
:
2110 return unit_can_start(u
);
2113 return unit_can_reload(u
);
2115 case JOB_RELOAD_OR_START
:
2116 return unit_can_reload(u
) && unit_can_start(u
);
2119 assert_not_reached("Invalid job type");
2123 static void maybe_warn_about_dependency(Unit
*u
, const char *other
, UnitDependency dependency
) {
2126 /* Only warn about some unit types */
2127 if (!IN_SET(dependency
, UNIT_CONFLICTS
, UNIT_CONFLICTED_BY
, UNIT_BEFORE
, UNIT_AFTER
, UNIT_ON_FAILURE
, UNIT_TRIGGERS
, UNIT_TRIGGERED_BY
))
2130 if (streq_ptr(u
->id
, other
))
2131 log_unit_warning(u
, "Dependency %s=%s dropped", unit_dependency_to_string(dependency
), u
->id
);
2133 log_unit_warning(u
, "Dependency %s=%s dropped, merged into %s", unit_dependency_to_string(dependency
), strna(other
), u
->id
);
2136 int unit_add_dependency(Unit
*u
, UnitDependency d
, Unit
*other
, bool add_reference
) {
2138 static const UnitDependency inverse_table
[_UNIT_DEPENDENCY_MAX
] = {
2139 [UNIT_REQUIRES
] = UNIT_REQUIRED_BY
,
2140 [UNIT_REQUIRES_OVERRIDABLE
] = UNIT_REQUIRED_BY_OVERRIDABLE
,
2141 [UNIT_WANTS
] = UNIT_WANTED_BY
,
2142 [UNIT_REQUISITE
] = UNIT_REQUISITE_OF
,
2143 [UNIT_REQUISITE_OVERRIDABLE
] = UNIT_REQUISITE_OF_OVERRIDABLE
,
2144 [UNIT_BINDS_TO
] = UNIT_BOUND_BY
,
2145 [UNIT_PART_OF
] = UNIT_CONSISTS_OF
,
2146 [UNIT_REQUIRED_BY
] = UNIT_REQUIRES
,
2147 [UNIT_REQUIRED_BY_OVERRIDABLE
] = UNIT_REQUIRES_OVERRIDABLE
,
2148 [UNIT_REQUISITE_OF
] = UNIT_REQUISITE
,
2149 [UNIT_REQUISITE_OF_OVERRIDABLE
] = UNIT_REQUISITE_OVERRIDABLE
,
2150 [UNIT_WANTED_BY
] = UNIT_WANTS
,
2151 [UNIT_BOUND_BY
] = UNIT_BINDS_TO
,
2152 [UNIT_CONSISTS_OF
] = UNIT_PART_OF
,
2153 [UNIT_CONFLICTS
] = UNIT_CONFLICTED_BY
,
2154 [UNIT_CONFLICTED_BY
] = UNIT_CONFLICTS
,
2155 [UNIT_BEFORE
] = UNIT_AFTER
,
2156 [UNIT_AFTER
] = UNIT_BEFORE
,
2157 [UNIT_ON_FAILURE
] = _UNIT_DEPENDENCY_INVALID
,
2158 [UNIT_REFERENCES
] = UNIT_REFERENCED_BY
,
2159 [UNIT_REFERENCED_BY
] = UNIT_REFERENCES
,
2160 [UNIT_TRIGGERS
] = UNIT_TRIGGERED_BY
,
2161 [UNIT_TRIGGERED_BY
] = UNIT_TRIGGERS
,
2162 [UNIT_PROPAGATES_RELOAD_TO
] = UNIT_RELOAD_PROPAGATED_FROM
,
2163 [UNIT_RELOAD_PROPAGATED_FROM
] = UNIT_PROPAGATES_RELOAD_TO
,
2164 [UNIT_JOINS_NAMESPACE_OF
] = UNIT_JOINS_NAMESPACE_OF
,
2166 int r
, q
= 0, v
= 0, w
= 0;
2167 Unit
*orig_u
= u
, *orig_other
= other
;
2170 assert(d
>= 0 && d
< _UNIT_DEPENDENCY_MAX
);
2173 u
= unit_follow_merge(u
);
2174 other
= unit_follow_merge(other
);
2176 /* We won't allow dependencies on ourselves. We will not
2177 * consider them an error however. */
2179 maybe_warn_about_dependency(orig_u
, orig_other
->id
, d
);
2183 r
= set_ensure_allocated(&u
->dependencies
[d
], NULL
);
2187 if (inverse_table
[d
] != _UNIT_DEPENDENCY_INVALID
) {
2188 r
= set_ensure_allocated(&other
->dependencies
[inverse_table
[d
]], NULL
);
2193 if (add_reference
) {
2194 r
= set_ensure_allocated(&u
->dependencies
[UNIT_REFERENCES
], NULL
);
2198 r
= set_ensure_allocated(&other
->dependencies
[UNIT_REFERENCED_BY
], NULL
);
2203 q
= set_put(u
->dependencies
[d
], other
);
2207 if (inverse_table
[d
] != _UNIT_DEPENDENCY_INVALID
&& inverse_table
[d
] != d
) {
2208 v
= set_put(other
->dependencies
[inverse_table
[d
]], u
);
2215 if (add_reference
) {
2216 w
= set_put(u
->dependencies
[UNIT_REFERENCES
], other
);
2222 r
= set_put(other
->dependencies
[UNIT_REFERENCED_BY
], u
);
2227 unit_add_to_dbus_queue(u
);
2232 set_remove(u
->dependencies
[d
], other
);
2235 set_remove(other
->dependencies
[inverse_table
[d
]], u
);
2238 set_remove(u
->dependencies
[UNIT_REFERENCES
], other
);
2243 int unit_add_two_dependencies(Unit
*u
, UnitDependency d
, UnitDependency e
, Unit
*other
, bool add_reference
) {
2248 r
= unit_add_dependency(u
, d
, other
, add_reference
);
2252 return unit_add_dependency(u
, e
, other
, add_reference
);
2255 static int resolve_template(Unit
*u
, const char *name
, const char*path
, char **buf
, const char **ret
) {
2259 assert(name
|| path
);
2264 name
= basename(path
);
2266 if (!unit_name_is_valid(name
, UNIT_NAME_TEMPLATE
)) {
2273 r
= unit_name_replace_instance(name
, u
->instance
, buf
);
2275 _cleanup_free_
char *i
= NULL
;
2277 r
= unit_name_to_prefix(u
->id
, &i
);
2281 r
= unit_name_replace_instance(name
, i
, buf
);
2290 int unit_add_dependency_by_name(Unit
*u
, UnitDependency d
, const char *name
, const char *path
, bool add_reference
) {
2291 _cleanup_free_
char *buf
= NULL
;
2296 assert(name
|| path
);
2298 r
= resolve_template(u
, name
, path
, &buf
, &name
);
2302 r
= manager_load_unit(u
->manager
, name
, path
, NULL
, &other
);
2306 return unit_add_dependency(u
, d
, other
, add_reference
);
2309 int unit_add_two_dependencies_by_name(Unit
*u
, UnitDependency d
, UnitDependency e
, const char *name
, const char *path
, bool add_reference
) {
2310 _cleanup_free_
char *buf
= NULL
;
2315 assert(name
|| path
);
2317 r
= resolve_template(u
, name
, path
, &buf
, &name
);
2321 r
= manager_load_unit(u
->manager
, name
, path
, NULL
, &other
);
2325 return unit_add_two_dependencies(u
, d
, e
, other
, add_reference
);
2328 int set_unit_path(const char *p
) {
2329 /* This is mostly for debug purposes */
2330 if (setenv("SYSTEMD_UNIT_PATH", p
, 0) < 0)
2336 char *unit_dbus_path(Unit
*u
) {
2342 return unit_dbus_path_from_name(u
->id
);
2345 int unit_set_slice(Unit
*u
, Unit
*slice
) {
2349 /* Sets the unit slice if it has not been set before. Is extra
2350 * careful, to only allow this for units that actually have a
2351 * cgroup context. Also, we don't allow to set this for slices
2352 * (since the parent slice is derived from the name). Make
2353 * sure the unit we set is actually a slice. */
2355 if (!UNIT_HAS_CGROUP_CONTEXT(u
))
2358 if (u
->type
== UNIT_SLICE
)
2361 if (unit_active_state(u
) != UNIT_INACTIVE
)
2364 if (slice
->type
!= UNIT_SLICE
)
2367 if (unit_has_name(u
, SPECIAL_INIT_SCOPE
) &&
2368 !unit_has_name(slice
, SPECIAL_ROOT_SLICE
))
2371 if (UNIT_DEREF(u
->slice
) == slice
)
2374 if (UNIT_ISSET(u
->slice
))
2377 unit_ref_set(&u
->slice
, slice
);
2381 int unit_set_default_slice(Unit
*u
) {
2382 _cleanup_free_
char *b
= NULL
;
2383 const char *slice_name
;
2389 if (UNIT_ISSET(u
->slice
))
2393 _cleanup_free_
char *prefix
= NULL
, *escaped
= NULL
;
2395 /* Implicitly place all instantiated units in their
2396 * own per-template slice */
2398 r
= unit_name_to_prefix(u
->id
, &prefix
);
2402 /* The prefix is already escaped, but it might include
2403 * "-" which has a special meaning for slice units,
2404 * hence escape it here extra. */
2405 escaped
= unit_name_escape(prefix
);
2409 if (u
->manager
->running_as
== MANAGER_SYSTEM
)
2410 b
= strjoin("system-", escaped
, ".slice", NULL
);
2412 b
= strappend(escaped
, ".slice");
2419 u
->manager
->running_as
== MANAGER_SYSTEM
&& !unit_has_name(u
, SPECIAL_INIT_SCOPE
)
2420 ? SPECIAL_SYSTEM_SLICE
2421 : SPECIAL_ROOT_SLICE
;
2423 r
= manager_load_unit(u
->manager
, slice_name
, NULL
, NULL
, &slice
);
2427 return unit_set_slice(u
, slice
);
2430 const char *unit_slice_name(Unit
*u
) {
2433 if (!UNIT_ISSET(u
->slice
))
2436 return UNIT_DEREF(u
->slice
)->id
;
2439 int unit_load_related_unit(Unit
*u
, const char *type
, Unit
**_found
) {
2440 _cleanup_free_
char *t
= NULL
;
2447 r
= unit_name_change_suffix(u
->id
, type
, &t
);
2450 if (unit_has_name(u
, t
))
2453 r
= manager_load_unit(u
->manager
, t
, NULL
, NULL
, _found
);
2454 assert(r
< 0 || *_found
!= u
);
2458 static int signal_name_owner_changed(sd_bus_message
*message
, void *userdata
, sd_bus_error
*error
) {
2459 const char *name
, *old_owner
, *new_owner
;
2466 r
= sd_bus_message_read(message
, "sss", &name
, &old_owner
, &new_owner
);
2468 bus_log_parse_error(r
);
2472 if (UNIT_VTABLE(u
)->bus_name_owner_change
)
2473 UNIT_VTABLE(u
)->bus_name_owner_change(u
, name
, old_owner
, new_owner
);
2478 int unit_install_bus_match(Unit
*u
, sd_bus
*bus
, const char *name
) {
2485 if (u
->match_bus_slot
)
2488 match
= strjoina("type='signal',"
2489 "sender='org.freedesktop.DBus',"
2490 "path='/org/freedesktop/DBus',"
2491 "interface='org.freedesktop.DBus',"
2492 "member='NameOwnerChanged',"
2493 "arg0='", name
, "'",
2496 return sd_bus_add_match(bus
, &u
->match_bus_slot
, match
, signal_name_owner_changed
, u
);
2499 int unit_watch_bus_name(Unit
*u
, const char *name
) {
2505 /* Watch a specific name on the bus. We only support one unit
2506 * watching each name for now. */
2508 if (u
->manager
->api_bus
) {
2509 /* If the bus is already available, install the match directly.
2510 * Otherwise, just put the name in the list. bus_setup_api() will take care later. */
2511 r
= unit_install_bus_match(u
, u
->manager
->api_bus
, name
);
2513 return log_warning_errno(r
, "Failed to subscribe to NameOwnerChanged signal: %m");
2516 r
= hashmap_put(u
->manager
->watch_bus
, name
, u
);
2518 u
->match_bus_slot
= sd_bus_slot_unref(u
->match_bus_slot
);
2519 return log_warning_errno(r
, "Failed to put bus name to hashmap: %m");
2525 void unit_unwatch_bus_name(Unit
*u
, const char *name
) {
2529 hashmap_remove_value(u
->manager
->watch_bus
, name
, u
);
2530 u
->match_bus_slot
= sd_bus_slot_unref(u
->match_bus_slot
);
2533 bool unit_can_serialize(Unit
*u
) {
2536 return UNIT_VTABLE(u
)->serialize
&& UNIT_VTABLE(u
)->deserialize_item
;
2539 int unit_serialize(Unit
*u
, FILE *f
, FDSet
*fds
, bool serialize_jobs
) {
2546 if (unit_can_serialize(u
)) {
2549 r
= UNIT_VTABLE(u
)->serialize(u
, f
, fds
);
2553 rt
= unit_get_exec_runtime(u
);
2555 r
= exec_runtime_serialize(u
, rt
, f
, fds
);
2561 dual_timestamp_serialize(f
, "inactive-exit-timestamp", &u
->inactive_exit_timestamp
);
2562 dual_timestamp_serialize(f
, "active-enter-timestamp", &u
->active_enter_timestamp
);
2563 dual_timestamp_serialize(f
, "active-exit-timestamp", &u
->active_exit_timestamp
);
2564 dual_timestamp_serialize(f
, "inactive-enter-timestamp", &u
->inactive_enter_timestamp
);
2565 dual_timestamp_serialize(f
, "condition-timestamp", &u
->condition_timestamp
);
2566 dual_timestamp_serialize(f
, "assert-timestamp", &u
->assert_timestamp
);
2568 if (dual_timestamp_is_set(&u
->condition_timestamp
))
2569 unit_serialize_item(u
, f
, "condition-result", yes_no(u
->condition_result
));
2571 if (dual_timestamp_is_set(&u
->assert_timestamp
))
2572 unit_serialize_item(u
, f
, "assert-result", yes_no(u
->assert_result
));
2574 unit_serialize_item(u
, f
, "transient", yes_no(u
->transient
));
2575 unit_serialize_item_format(u
, f
, "cpuacct-usage-base", "%" PRIu64
, u
->cpuacct_usage_base
);
2578 unit_serialize_item(u
, f
, "cgroup", u
->cgroup_path
);
2579 unit_serialize_item(u
, f
, "cgroup-realized", yes_no(u
->cgroup_realized
));
2581 if (u
->cgroup_netclass_id
)
2582 unit_serialize_item_format(u
, f
, "netclass-id", "%" PRIu32
, u
->cgroup_netclass_id
);
2584 if (serialize_jobs
) {
2586 fprintf(f
, "job\n");
2587 job_serialize(u
->job
, f
, fds
);
2591 fprintf(f
, "job\n");
2592 job_serialize(u
->nop_job
, f
, fds
);
2601 int unit_serialize_item(Unit
*u
, FILE *f
, const char *key
, const char *value
) {
2617 int unit_serialize_item_escaped(Unit
*u
, FILE *f
, const char *key
, const char *value
) {
2618 _cleanup_free_
char *c
= NULL
;
2639 int unit_serialize_item_fd(Unit
*u
, FILE *f
, FDSet
*fds
, const char *key
, int fd
) {
2649 copy
= fdset_put_dup(fds
, fd
);
2653 fprintf(f
, "%s=%i\n", key
, copy
);
2657 void unit_serialize_item_format(Unit
*u
, FILE *f
, const char *key
, const char *format
, ...) {
2668 va_start(ap
, format
);
2669 vfprintf(f
, format
, ap
);
2675 int unit_deserialize(Unit
*u
, FILE *f
, FDSet
*fds
) {
2676 ExecRuntime
**rt
= NULL
;
2684 offset
= UNIT_VTABLE(u
)->exec_runtime_offset
;
2686 rt
= (ExecRuntime
**) ((uint8_t*) u
+ offset
);
2689 char line
[LINE_MAX
], *l
, *v
;
2692 if (!fgets(line
, sizeof(line
), f
)) {
2705 k
= strcspn(l
, "=");
2713 if (streq(l
, "job")) {
2715 /* new-style serialized job */
2722 r
= job_deserialize(j
, f
, fds
);
2728 r
= hashmap_put(u
->manager
->jobs
, UINT32_TO_PTR(j
->id
), j
);
2734 r
= job_install_deserialized(j
);
2736 hashmap_remove(u
->manager
->jobs
, UINT32_TO_PTR(j
->id
));
2740 } else /* legacy for pre-44 */
2741 log_unit_warning(u
, "Update from too old systemd versions are unsupported, cannot deserialize job: %s", v
);
2743 } else if (streq(l
, "inactive-exit-timestamp")) {
2744 dual_timestamp_deserialize(v
, &u
->inactive_exit_timestamp
);
2746 } else if (streq(l
, "active-enter-timestamp")) {
2747 dual_timestamp_deserialize(v
, &u
->active_enter_timestamp
);
2749 } else if (streq(l
, "active-exit-timestamp")) {
2750 dual_timestamp_deserialize(v
, &u
->active_exit_timestamp
);
2752 } else if (streq(l
, "inactive-enter-timestamp")) {
2753 dual_timestamp_deserialize(v
, &u
->inactive_enter_timestamp
);
2755 } else if (streq(l
, "condition-timestamp")) {
2756 dual_timestamp_deserialize(v
, &u
->condition_timestamp
);
2758 } else if (streq(l
, "assert-timestamp")) {
2759 dual_timestamp_deserialize(v
, &u
->assert_timestamp
);
2761 } else if (streq(l
, "condition-result")) {
2763 r
= parse_boolean(v
);
2765 log_unit_debug(u
, "Failed to parse condition result value %s, ignoring.", v
);
2767 u
->condition_result
= r
;
2771 } else if (streq(l
, "assert-result")) {
2773 r
= parse_boolean(v
);
2775 log_unit_debug(u
, "Failed to parse assert result value %s, ignoring.", v
);
2777 u
->assert_result
= r
;
2781 } else if (streq(l
, "transient")) {
2783 r
= parse_boolean(v
);
2785 log_unit_debug(u
, "Failed to parse transient bool %s, ignoring.", v
);
2791 } else if (streq(l
, "cpuacct-usage-base")) {
2793 r
= safe_atou64(v
, &u
->cpuacct_usage_base
);
2795 log_unit_debug(u
, "Failed to parse CPU usage %s, ignoring.", v
);
2799 } else if (streq(l
, "cgroup")) {
2801 r
= unit_set_cgroup_path(u
, v
);
2803 log_unit_debug_errno(u
, r
, "Failed to set cgroup path %s, ignoring: %m", v
);
2805 (void) unit_watch_cgroup(u
);
2808 } else if (streq(l
, "cgroup-realized")) {
2811 b
= parse_boolean(v
);
2813 log_unit_debug(u
, "Failed to parse cgroup-realized bool %s, ignoring.", v
);
2815 u
->cgroup_realized
= b
;
2818 } else if (streq(l
, "netclass-id")) {
2819 r
= safe_atou32(v
, &u
->cgroup_netclass_id
);
2821 log_unit_debug(u
, "Failed to parse netclass ID %s, ignoring.", v
);
2823 r
= unit_add_to_netclass_cgroup(u
);
2825 log_unit_debug_errno(u
, r
, "Failed to add unit to netclass cgroup, ignoring: %m");
2831 if (unit_can_serialize(u
)) {
2833 r
= exec_runtime_deserialize_item(u
, rt
, l
, v
, fds
);
2835 log_unit_warning(u
, "Failed to deserialize runtime parameter '%s', ignoring.", l
);
2839 /* Returns positive if key was handled by the call */
2844 r
= UNIT_VTABLE(u
)->deserialize_item(u
, l
, v
, fds
);
2846 log_unit_warning(u
, "Failed to deserialize unit parameter '%s', ignoring.", l
);
2851 int unit_add_node_link(Unit
*u
, const char *what
, bool wants
) {
2853 _cleanup_free_
char *e
= NULL
;
2858 /* Adds in links to the device node that this unit is based on */
2862 if (!is_device_path(what
))
2865 /* When device units aren't supported (such as in a
2866 * container), don't create dependencies on them. */
2867 if (!unit_type_supported(UNIT_DEVICE
))
2870 r
= unit_name_from_path(what
, ".device", &e
);
2874 r
= manager_load_unit(u
->manager
, e
, NULL
, NULL
, &device
);
2878 r
= unit_add_two_dependencies(u
, UNIT_AFTER
, u
->manager
->running_as
== MANAGER_SYSTEM
? UNIT_BINDS_TO
: UNIT_WANTS
, device
, true);
2883 r
= unit_add_dependency(device
, UNIT_WANTS
, u
, false);
2891 int unit_coldplug(Unit
*u
) {
2896 /* Make sure we don't enter a loop, when coldplugging
2901 u
->coldplugged
= true;
2903 if (UNIT_VTABLE(u
)->coldplug
) {
2904 r
= UNIT_VTABLE(u
)->coldplug(u
);
2910 r
= job_coldplug(u
->job
);
2918 void unit_status_printf(Unit
*u
, const char *status
, const char *unit_status_msg_format
) {
2919 DISABLE_WARNING_FORMAT_NONLITERAL
;
2920 manager_status_printf(u
->manager
, STATUS_TYPE_NORMAL
,
2921 status
, unit_status_msg_format
, unit_description(u
));
2925 bool unit_need_daemon_reload(Unit
*u
) {
2926 _cleanup_strv_free_
char **t
= NULL
;
2929 unsigned loaded_cnt
, current_cnt
;
2933 if (u
->fragment_path
) {
2935 if (stat(u
->fragment_path
, &st
) < 0)
2936 /* What, cannot access this anymore? */
2939 if (u
->fragment_mtime
> 0 &&
2940 timespec_load(&st
.st_mtim
) != u
->fragment_mtime
)
2944 if (u
->source_path
) {
2946 if (stat(u
->source_path
, &st
) < 0)
2949 if (u
->source_mtime
> 0 &&
2950 timespec_load(&st
.st_mtim
) != u
->source_mtime
)
2954 (void) unit_find_dropin_paths(u
, &t
);
2955 loaded_cnt
= strv_length(t
);
2956 current_cnt
= strv_length(u
->dropin_paths
);
2958 if (loaded_cnt
== current_cnt
) {
2959 if (loaded_cnt
== 0)
2962 if (strv_overlap(u
->dropin_paths
, t
)) {
2963 STRV_FOREACH(path
, u
->dropin_paths
) {
2965 if (stat(*path
, &st
) < 0)
2968 if (u
->dropin_mtime
> 0 &&
2969 timespec_load(&st
.st_mtim
) > u
->dropin_mtime
)
2980 void unit_reset_failed(Unit
*u
) {
2983 if (UNIT_VTABLE(u
)->reset_failed
)
2984 UNIT_VTABLE(u
)->reset_failed(u
);
2987 Unit
*unit_following(Unit
*u
) {
2990 if (UNIT_VTABLE(u
)->following
)
2991 return UNIT_VTABLE(u
)->following(u
);
2996 bool unit_stop_pending(Unit
*u
) {
2999 /* This call does check the current state of the unit. It's
3000 * hence useful to be called from state change calls of the
3001 * unit itself, where the state isn't updated yet. This is
3002 * different from unit_inactive_or_pending() which checks both
3003 * the current state and for a queued job. */
3005 return u
->job
&& u
->job
->type
== JOB_STOP
;
3008 bool unit_inactive_or_pending(Unit
*u
) {
3011 /* Returns true if the unit is inactive or going down */
3013 if (UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(u
)))
3016 if (unit_stop_pending(u
))
3022 bool unit_active_or_pending(Unit
*u
) {
3025 /* Returns true if the unit is active or going up */
3027 if (UNIT_IS_ACTIVE_OR_ACTIVATING(unit_active_state(u
)))
3031 (u
->job
->type
== JOB_START
||
3032 u
->job
->type
== JOB_RELOAD_OR_START
||
3033 u
->job
->type
== JOB_RESTART
))
3039 int unit_kill(Unit
*u
, KillWho w
, int signo
, sd_bus_error
*error
) {
3041 assert(w
>= 0 && w
< _KILL_WHO_MAX
);
3043 assert(signo
< _NSIG
);
3045 if (!UNIT_VTABLE(u
)->kill
)
3048 return UNIT_VTABLE(u
)->kill(u
, w
, signo
, error
);
3051 static Set
*unit_pid_set(pid_t main_pid
, pid_t control_pid
) {
3055 pid_set
= set_new(NULL
);
3059 /* Exclude the main/control pids from being killed via the cgroup */
3061 r
= set_put(pid_set
, PID_TO_PTR(main_pid
));
3066 if (control_pid
> 0) {
3067 r
= set_put(pid_set
, PID_TO_PTR(control_pid
));
3079 int unit_kill_common(
3085 sd_bus_error
*error
) {
3088 bool killed
= false;
3090 if (IN_SET(who
, KILL_MAIN
, KILL_MAIN_FAIL
)) {
3092 return sd_bus_error_setf(error
, BUS_ERROR_NO_SUCH_PROCESS
, "%s units have no main processes", unit_type_to_string(u
->type
));
3093 else if (main_pid
== 0)
3094 return sd_bus_error_set_const(error
, BUS_ERROR_NO_SUCH_PROCESS
, "No main process to kill");
3097 if (IN_SET(who
, KILL_CONTROL
, KILL_CONTROL_FAIL
)) {
3098 if (control_pid
< 0)
3099 return sd_bus_error_setf(error
, BUS_ERROR_NO_SUCH_PROCESS
, "%s units have no control processes", unit_type_to_string(u
->type
));
3100 else if (control_pid
== 0)
3101 return sd_bus_error_set_const(error
, BUS_ERROR_NO_SUCH_PROCESS
, "No control process to kill");
3104 if (IN_SET(who
, KILL_CONTROL
, KILL_CONTROL_FAIL
, KILL_ALL
, KILL_ALL_FAIL
))
3105 if (control_pid
> 0) {
3106 if (kill(control_pid
, signo
) < 0)
3112 if (IN_SET(who
, KILL_MAIN
, KILL_MAIN_FAIL
, KILL_ALL
, KILL_ALL_FAIL
))
3114 if (kill(main_pid
, signo
) < 0)
3120 if (IN_SET(who
, KILL_ALL
, KILL_ALL_FAIL
) && u
->cgroup_path
) {
3121 _cleanup_set_free_ Set
*pid_set
= NULL
;
3124 /* Exclude the main/control pids from being killed via the cgroup */
3125 pid_set
= unit_pid_set(main_pid
, control_pid
);
3129 q
= cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER
, u
->cgroup_path
, signo
, false, false, false, pid_set
);
3130 if (q
< 0 && q
!= -EAGAIN
&& q
!= -ESRCH
&& q
!= -ENOENT
)
3136 if (r
== 0 && !killed
&& IN_SET(who
, KILL_ALL_FAIL
, KILL_CONTROL_FAIL
, KILL_ALL_FAIL
))
3142 int unit_following_set(Unit
*u
, Set
**s
) {
3146 if (UNIT_VTABLE(u
)->following_set
)
3147 return UNIT_VTABLE(u
)->following_set(u
, s
);
3153 UnitFileState
unit_get_unit_file_state(Unit
*u
) {
3156 if (u
->unit_file_state
< 0 && u
->fragment_path
)
3157 u
->unit_file_state
= unit_file_get_state(
3158 u
->manager
->running_as
== MANAGER_SYSTEM
? UNIT_FILE_SYSTEM
: UNIT_FILE_USER
,
3159 NULL
, basename(u
->fragment_path
));
3161 return u
->unit_file_state
;
3164 int unit_get_unit_file_preset(Unit
*u
) {
3167 if (u
->unit_file_preset
< 0 && u
->fragment_path
)
3168 u
->unit_file_preset
= unit_file_query_preset(
3169 u
->manager
->running_as
== MANAGER_SYSTEM
? UNIT_FILE_SYSTEM
: UNIT_FILE_USER
,
3170 NULL
, basename(u
->fragment_path
));
3172 return u
->unit_file_preset
;
3175 Unit
* unit_ref_set(UnitRef
*ref
, Unit
*u
) {
3180 unit_ref_unset(ref
);
3183 LIST_PREPEND(refs
, u
->refs
, ref
);
3187 void unit_ref_unset(UnitRef
*ref
) {
3193 LIST_REMOVE(refs
, ref
->unit
->refs
, ref
);
3197 int unit_patch_contexts(Unit
*u
) {
3205 /* Patch in the manager defaults into the exec and cgroup
3206 * contexts, _after_ the rest of the settings have been
3209 ec
= unit_get_exec_context(u
);
3211 /* This only copies in the ones that need memory */
3212 for (i
= 0; i
< _RLIMIT_MAX
; i
++)
3213 if (u
->manager
->rlimit
[i
] && !ec
->rlimit
[i
]) {
3214 ec
->rlimit
[i
] = newdup(struct rlimit
, u
->manager
->rlimit
[i
], 1);
3219 if (u
->manager
->running_as
== MANAGER_USER
&&
3220 !ec
->working_directory
) {
3222 r
= get_home_dir(&ec
->working_directory
);
3226 /* Allow user services to run, even if the
3227 * home directory is missing */
3228 ec
->working_directory_missing_ok
= true;
3231 if (u
->manager
->running_as
== MANAGER_USER
&&
3232 (ec
->syscall_whitelist
||
3233 !set_isempty(ec
->syscall_filter
) ||
3234 !set_isempty(ec
->syscall_archs
) ||
3235 ec
->address_families_whitelist
||
3236 !set_isempty(ec
->address_families
)))
3237 ec
->no_new_privileges
= true;
3239 if (ec
->private_devices
)
3240 ec
->capability_bounding_set_drop
|= (uint64_t) 1ULL << (uint64_t) CAP_MKNOD
;
3243 cc
= unit_get_cgroup_context(u
);
3247 ec
->private_devices
&&
3248 cc
->device_policy
== CGROUP_AUTO
)
3249 cc
->device_policy
= CGROUP_CLOSED
;
3255 ExecContext
*unit_get_exec_context(Unit
*u
) {
3262 offset
= UNIT_VTABLE(u
)->exec_context_offset
;
3266 return (ExecContext
*) ((uint8_t*) u
+ offset
);
3269 KillContext
*unit_get_kill_context(Unit
*u
) {
3276 offset
= UNIT_VTABLE(u
)->kill_context_offset
;
3280 return (KillContext
*) ((uint8_t*) u
+ offset
);
3283 CGroupContext
*unit_get_cgroup_context(Unit
*u
) {
3289 offset
= UNIT_VTABLE(u
)->cgroup_context_offset
;
3293 return (CGroupContext
*) ((uint8_t*) u
+ offset
);
3296 ExecRuntime
*unit_get_exec_runtime(Unit
*u
) {
3302 offset
= UNIT_VTABLE(u
)->exec_runtime_offset
;
3306 return *(ExecRuntime
**) ((uint8_t*) u
+ offset
);
3309 static int unit_drop_in_dir(Unit
*u
, UnitSetPropertiesMode mode
, bool transient
, char **dir
) {
3312 if (u
->manager
->running_as
== MANAGER_USER
) {
3315 if (mode
== UNIT_PERSISTENT
&& !transient
)
3316 r
= user_config_home(dir
);
3318 r
= user_runtime_dir(dir
);
3325 if (mode
== UNIT_PERSISTENT
&& !transient
)
3326 *dir
= strdup("/etc/systemd/system");
3328 *dir
= strdup("/run/systemd/system");
3335 int unit_write_drop_in(Unit
*u
, UnitSetPropertiesMode mode
, const char *name
, const char *data
) {
3337 _cleanup_free_
char *dir
= NULL
, *p
= NULL
, *q
= NULL
;
3342 if (!IN_SET(mode
, UNIT_PERSISTENT
, UNIT_RUNTIME
))
3345 r
= unit_drop_in_dir(u
, mode
, u
->transient
, &dir
);
3349 r
= write_drop_in(dir
, u
->id
, 50, name
, data
);
3353 r
= drop_in_file(dir
, u
->id
, 50, name
, &p
, &q
);
3357 r
= strv_extend(&u
->dropin_paths
, q
);
3361 strv_sort(u
->dropin_paths
);
3362 strv_uniq(u
->dropin_paths
);
3364 u
->dropin_mtime
= now(CLOCK_REALTIME
);
3369 int unit_write_drop_in_format(Unit
*u
, UnitSetPropertiesMode mode
, const char *name
, const char *format
, ...) {
3370 _cleanup_free_
char *p
= NULL
;
3378 if (!IN_SET(mode
, UNIT_PERSISTENT
, UNIT_RUNTIME
))
3381 va_start(ap
, format
);
3382 r
= vasprintf(&p
, format
, ap
);
3388 return unit_write_drop_in(u
, mode
, name
, p
);
3391 int unit_write_drop_in_private(Unit
*u
, UnitSetPropertiesMode mode
, const char *name
, const char *data
) {
3392 _cleanup_free_
char *ndata
= NULL
;
3398 if (!UNIT_VTABLE(u
)->private_section
)
3401 if (!IN_SET(mode
, UNIT_PERSISTENT
, UNIT_RUNTIME
))
3404 ndata
= strjoin("[", UNIT_VTABLE(u
)->private_section
, "]\n", data
, NULL
);
3408 return unit_write_drop_in(u
, mode
, name
, ndata
);
3411 int unit_write_drop_in_private_format(Unit
*u
, UnitSetPropertiesMode mode
, const char *name
, const char *format
, ...) {
3412 _cleanup_free_
char *p
= NULL
;
3420 if (!IN_SET(mode
, UNIT_PERSISTENT
, UNIT_RUNTIME
))
3423 va_start(ap
, format
);
3424 r
= vasprintf(&p
, format
, ap
);
3430 return unit_write_drop_in_private(u
, mode
, name
, p
);
3433 int unit_make_transient(Unit
*u
) {
3436 if (!UNIT_VTABLE(u
)->can_transient
)
3439 u
->load_state
= UNIT_STUB
;
3441 u
->transient
= true;
3442 u
->fragment_path
= mfree(u
->fragment_path
);
3447 int unit_kill_context(
3453 bool main_pid_alien
) {
3455 bool wait_for_exit
= false;
3461 if (c
->kill_mode
== KILL_NONE
)
3471 case KILL_TERMINATE
:
3472 sig
= c
->kill_signal
;
3475 assert_not_reached("KillOperation unknown");
3479 r
= kill_and_sigcont(main_pid
, sig
);
3481 if (r
< 0 && r
!= -ESRCH
) {
3482 _cleanup_free_
char *comm
= NULL
;
3483 get_process_comm(main_pid
, &comm
);
3485 log_unit_warning_errno(u
, r
, "Failed to kill main process " PID_FMT
" (%s), ignoring: %m", main_pid
, strna(comm
));
3487 if (!main_pid_alien
)
3488 wait_for_exit
= true;
3490 if (c
->send_sighup
&& k
== KILL_TERMINATE
)
3491 (void) kill(main_pid
, SIGHUP
);
3495 if (control_pid
> 0) {
3496 r
= kill_and_sigcont(control_pid
, sig
);
3498 if (r
< 0 && r
!= -ESRCH
) {
3499 _cleanup_free_
char *comm
= NULL
;
3500 get_process_comm(control_pid
, &comm
);
3502 log_unit_warning_errno(u
, r
, "Failed to kill control process " PID_FMT
" (%s), ignoring: %m", control_pid
, strna(comm
));
3504 wait_for_exit
= true;
3506 if (c
->send_sighup
&& k
== KILL_TERMINATE
)
3507 (void) kill(control_pid
, SIGHUP
);
3511 if (u
->cgroup_path
&&
3512 (c
->kill_mode
== KILL_CONTROL_GROUP
|| (c
->kill_mode
== KILL_MIXED
&& k
== KILL_KILL
))) {
3513 _cleanup_set_free_ Set
*pid_set
= NULL
;
3515 /* Exclude the main/control pids from being killed via the cgroup */
3516 pid_set
= unit_pid_set(main_pid
, control_pid
);
3520 r
= cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER
, u
->cgroup_path
, sig
, true, k
!= KILL_TERMINATE
, false, pid_set
);
3522 if (r
!= -EAGAIN
&& r
!= -ESRCH
&& r
!= -ENOENT
)
3523 log_unit_warning_errno(u
, r
, "Failed to kill control group %s, ignoring: %m", u
->cgroup_path
);
3527 /* FIXME: For now, on the legacy hierarchy, we
3528 * will not wait for the cgroup members to die
3529 * if we are running in a container or if this
3530 * is a delegation unit, simply because cgroup
3531 * notification is unreliable in these
3532 * cases. It doesn't work at all in
3533 * containers, and outside of containers it
3534 * can be confused easily by left-over
3535 * directories in the cgroup -- which however
3536 * should not exist in non-delegated units. On
3537 * the unified hierarchy that's different,
3538 * there we get proper events. Hence rely on
3541 if (cg_unified() > 0 ||
3542 (detect_container() == 0 && !unit_cgroup_delegate(u
)))
3543 wait_for_exit
= true;
3545 if (c
->send_sighup
&& k
!= KILL_KILL
) {
3548 pid_set
= unit_pid_set(main_pid
, control_pid
);
3552 cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER
, u
->cgroup_path
, SIGHUP
, false, true, false, pid_set
);
3557 return wait_for_exit
;
3560 int unit_require_mounts_for(Unit
*u
, const char *path
) {
3561 char prefix
[strlen(path
) + 1], *p
;
3567 /* Registers a unit for requiring a certain path and all its
3568 * prefixes. We keep a simple array of these paths in the
3569 * unit, since its usually short. However, we build a prefix
3570 * table for all possible prefixes so that new appearing mount
3571 * units can easily determine which units to make themselves a
3574 if (!path_is_absolute(path
))
3581 path_kill_slashes(p
);
3583 if (!path_is_safe(p
)) {
3588 if (strv_contains(u
->requires_mounts_for
, p
)) {
3593 r
= strv_consume(&u
->requires_mounts_for
, p
);
3597 PATH_FOREACH_PREFIX_MORE(prefix
, p
) {
3600 x
= hashmap_get(u
->manager
->units_requiring_mounts_for
, prefix
);
3604 r
= hashmap_ensure_allocated(&u
->manager
->units_requiring_mounts_for
, &string_hash_ops
);
3618 r
= hashmap_put(u
->manager
->units_requiring_mounts_for
, q
, x
);
3634 int unit_setup_exec_runtime(Unit
*u
) {
3640 offset
= UNIT_VTABLE(u
)->exec_runtime_offset
;
3643 /* Check if there already is an ExecRuntime for this unit? */
3644 rt
= (ExecRuntime
**) ((uint8_t*) u
+ offset
);
3648 /* Try to get it from somebody else */
3649 SET_FOREACH(other
, u
->dependencies
[UNIT_JOINS_NAMESPACE_OF
], i
) {
3651 *rt
= unit_get_exec_runtime(other
);
3653 exec_runtime_ref(*rt
);
3658 return exec_runtime_make(rt
, unit_get_exec_context(u
), u
->id
);
3661 bool unit_type_supported(UnitType t
) {
3662 if (_unlikely_(t
< 0))
3664 if (_unlikely_(t
>= _UNIT_TYPE_MAX
))
3667 if (!unit_vtable
[t
]->supported
)
3670 return unit_vtable
[t
]->supported();
3673 void unit_warn_if_dir_nonempty(Unit
*u
, const char* where
) {
3679 r
= dir_is_empty(where
);
3683 log_unit_warning_errno(u
, r
, "Failed to check directory %s: %m", where
);
3687 log_struct(LOG_NOTICE
,
3688 LOG_MESSAGE_ID(SD_MESSAGE_OVERMOUNTING
),
3690 LOG_UNIT_MESSAGE(u
, "Directory %s to mount over is not empty, mounting anyway.", where
),
3695 int unit_fail_if_symlink(Unit
*u
, const char* where
) {
3701 r
= is_symlink(where
);
3703 log_unit_debug_errno(u
, r
, "Failed to check symlink %s, ignoring: %m", where
);
3710 LOG_MESSAGE_ID(SD_MESSAGE_OVERMOUNTING
),
3712 LOG_UNIT_MESSAGE(u
, "Mount on symlink %s not allowed.", where
),