Commit Graph
332 Commits
Author SHA1 Message Date
Zbigniew Jędrzejewski-Szmek 42ba99748d various: do not include file names directly in error messages
git grep -l 'Failed to open /'|xargs sed -r -i 's|"Failed to open (/[^ ]+): %m"|"Failed to open %s: %m", "\1"|g'
git grep -l $'Failed to open \'/'|xargs sed -r -i $'s|"Failed to open \'(/[^ ]+)\': %m"|"Failed to open %s: %m", "\\1"|g'
git grep -l "Failed to open /"|xargs sed -r -i $'s|"Failed to open (/[^ ]+), ignoring: %m"|"Failed to open %s, ignoring: %m", "\\1"|g'
+ some manual fixups.
2025-06-02 11:10:38 +02:00
Daan De Meyer 836e4e7ea8 core: Clean up includes
Split out of #37344.
2025-05-22 09:37:20 +02:00
Yu Watanabe fee2f5ca3f core/mount,swap: reload unit when manually mounted/started and we previously failed to load
Otherwise, neither unit_patch_contexts() nor unit_add_exec_dependencies()
is called for the unit.
2025-05-11 03:32:48 +09:00
Daan De Meyer 1cf40697e3 tree-wide: Sort includes
This was done by running a locally built clang-format with
https://github.com/llvm/llvm-project/pull/137617 and
https://github.com/llvm/llvm-project/pull/137840 applied on all .c
and .h files.
2025-04-30 09:30:51 +02:00
Daan De Meyer 4ea4abb651 core: Remove circular dependencies between headers
Currently there are various circular dependencies between headers
in core/. Let's get rid of these by making judicious use of forward
declarations and moving includes into implementation files instead of
having them in header files.

Getting rid of circular header includes simplifies the code and makes
various clang based tooling such as iwyu work much better on our code.

The most important change is getting rid of the manager.h include in
unit.h which is possible thanks to the previous commits. We also move
the OOMPolicy and StatusType enums to unit.h to remove the need for
other unit headers to include manager.h to get access to these enums.
2025-04-23 10:33:35 +02:00
Zbigniew Jędrzejewski-Szmek 1ae9b0cfa8 basic/glyph-util: rename "special glyph" to just "glyph"
Admittedly, some of our glyphs _are_ special, e.g. "O=" for SPECIAL_GLYPH_TOUCH ;)
But we don't need this in the name. The very long names make some invocations
very wordy, e.g. special_glyph(SPECIAL_GLYPH_SLIGHTLY_UNHAPPY_SMILEY).
Also, I want to add GLYPH_SPACE, which is not special at all.
2025-03-15 14:40:39 +01:00
Yu Watanabe 5c9feb2d6e tree-wide: drop unnecessary break in default branch 2025-03-06 11:42:20 +01:00
Nick Rosbrook 5dc89b327f tree-wide: remove some spurious newlines
Specifically, remove double newlines, and newlines before '}'.
2025-01-29 16:17:46 +00:00
Mike Yuan 703b1b7f24 core/service: preserve RuntimeDirectory= even if oneshot service exits
Follow-up for c26948c6da

We only want to get rid of cred mount here, and RuntimeDirectory=
is documented to be retained for SERVICE_EXITED state.

Fixes #35427
2024-12-02 10:57:45 +01:00
Łukasz Stelmach 8144537a81 core: make mount(8) and swapon(8) inherit SMACK label from systemd
By default mount(8), umount(8), swapon(8) and swapoff(8) should run with
with the SMACK label inherited from systemd rather than the default one
meant for services.

Fixes: aa5ae9711e
Follow-up-for: 20bbf5ee4c
2024-10-30 17:41:23 +01:00
Mike Yuan 2234032c47 core: move check for combination of PAMName= + KillMode= to unit_verify_contexts()
While at it, allow "mixed" for all unit types too, i.e.
also apply ebc2259da1 to
socket/mount/swap units.
2024-08-26 14:52:25 +02:00
Mike Yuan 95e631da43 core/unit: unexport cg_kill log funcs, rather take in bool
It seems unnecessary to duplicate the func ptrs everywhere.
2024-08-02 16:36:08 +02:00
Mike Yuan f26b2ec461 core: do not set up cgroup runtime on coldplug
Currently, unit_setup_cgroup_runtime() is called in
various _coldplug() functions if the unit is not inactive.
That seems unnecessary though, and kinda defeats the purpose
of CGroupRuntime. If we need to fork off a process for the unit
or got something during deserialization, the CGroupRuntime
would be automatically set up by unit_prepare_exec() /
cgroup_runtime_deserialize_one(). Otherwise it would mean
the cgroup doesn't exist and we don't need to allocate
that in the first place.

Plus, note that socket units might also carry a cgroup with
ExecStartPre=/ExecStartPost=/... Hence the existing code
is really inconsistent.
2024-06-28 15:43:21 +02:00
Mike Yuan bb33c5da87 core/swap: rename variable 'new' -> 'new_unit'
Follow-up for ba31a5018f

'new' is already used as a macro for memory allocation.
Let's avoid the confusion here.

Addresses https://github.com/systemd/systemd/pull/31902#discussion_r1557672858
2024-05-15 21:54:21 +08:00
Lennart Poettering 2b5321817f swap: hook up with handoff timestamps 2024-04-25 13:40:41 +02:00
Lennart Poettering b9e4d9ba95 mount,swap: include ExecStatus output in dump
socket and service units output there ExecCommand/ExecStatus definitions
already, but this was missing in mount/swap. Fix that.
2024-04-24 21:23:42 +02:00
Daan De Meyer aaa872a713 core: Serialize both pid and pidfd to keep downgrades working
Currently, when downgrading from a version with pidfd support to a
version without pidfd support, all information about running processes
is lost as the newer systemd will serialized pidfds which are not recognized
by the older systemd when deserializing.

To improve the situation, let's serialize both the pid and the pidfd.
This is safe because existing versions will either replace the first
deserialized pidref with the second one or discard the second one in
favor of the first one depending on the unit and field. Older versions
that don't support pidfd's will silently discard any fields that contain
a pidfd as those will try to parse the field as a pid and since a pidfd
field will start with '@', those versions will debug error log and ignore
the value.

To make sure we reuse the existing pidfd as much as possible, the pidfd
is serialized first. Both for scopes and service main pids, if the same
pid is seen multiple times, the first pidref is kept. So by serializing
the pidfd first we make sure the original pidfd is used instead of the
new one which is opened when deserializing the first pid field.

For other control units, older versions with pidfd support will discard
the first pidfd and replace it with a new pidfd from the second pid field.
This is a slight regression on downgrades, but we make sure it doesn't
happen for future versions (and older versions when this commit is
backported) by modifying the logic to only use the first successfully
deserialized pidref so that the raw pid without pidfd is discarded instead
of it replacing the existing pidfd.
2024-04-05 12:56:26 +09:00
Yu Watanabe 17f6b64038 core: align table 2024-03-29 13:51:15 +09:00
Mike Yuan dc4c587163 core: introduce UNIT_IS_LOAD_ERROR helper 2024-03-24 01:08:40 +08:00
Mike Yuan abef0ec308 core/swap: another try on memory mgmt
Follow-up for ba31a5018f

Another stupid mistake... Shouldn't have
written anything when I was tired.
2024-03-23 19:48:28 +08:00
Mike Yuan ba31a5018f core/swap: fix memory management in swap_setup_unit
Follow-up for e9fa1bf704
2024-03-22 18:30:39 +08:00
Mike Yuan 4ecb673e6f core: use RET_GATHER more 2024-03-22 01:36:37 +08:00
Mike Yuan e9fa1bf704 core: use ASSERT_PTR(CAST(u)) everywhere 2024-03-22 01:36:37 +08:00
Lennart Poettering 9cc545447e core: split out cgroup specific state fields from Unit → CGroupRuntime
This refactors the Unit structure a bit: all cgroup-related state fields
are moved to a new structure CGroupRuntime, which is only allocated as
we realize a cgroup.

This is both a nice cleanup and should make unit structures considerably
smaller that have no cgroup associated, because never realized or
because they belong to a unit type that doesn#t have cgroups anyway.

This makes things nicely symmetric:

        ExecContext → static user configuration about execution
        ExecRuntime → dynamic user state of execution
        CGroupContext → static user configuration about cgroups
        CGroupRuntime → dynamic user state of cgroups

And each time the XyzContext is part of the unit type structures such as
Service or Slice that need it, but the runtime object is only allocated
when a unit is started.
2024-02-16 10:17:40 +01:00
Luca Boccassi 556d2bc4a1 core: use PidRef in exec_spawn 2024-02-01 21:06:14 +00:00
Yu Watanabe ea1e0bf10b core: introduce unit_unwatch_pidref_done() helper function
No functional change, just refactoring.
2024-01-26 00:31:02 +09:00
Yu Watanabe b826e31754 core: use helper functions like unit_main_pid() in unit_kill_context()
No functional changes. Just refactoring.
2024-01-24 14:43:18 +09:00
Lennart Poettering d42b61d279 core: maintain a single table with event source priorities
It's hard to oversee the assigned processing priorities of the various
event sources we have. Let's unify them in a table (an enum), where we
can have a single consisten look at them, and then reference the table
entries by expressive symbols.

This doesn#t change behaviour in any way, it just gives each priority a
nice label, but doesn't change any of the priorities.

Prompted by: #30799
2024-01-19 16:46:28 +01:00
Luca Boccassi 9e615fa3aa core: add WantsMountsFor=
This is the equivalent of RequiresMountsFor=, but adds Wants= instead
of Requires=. It will be useful for example for the autogenerated
systemd-cryptsetup units.

Fixes https://github.com/systemd/systemd/issues/11646
2023-11-29 11:04:59 +00:00
Luca Boccassi fba173ff6a core: rename and add comment to ExecParameters cleanup functions 2023-11-01 12:43:22 +09:00
Daan De Meyer f57cc32fa1 swap: Move two functions to swap.h 2023-10-20 14:09:32 +02:00
Lennart Poettering 4d9f092b5e process-util: add pidref_is_unwaited() and make pid_is_unwaited() return errors 2023-10-18 14:49:40 +02:00
Luca Boccassi b646fc324a core: ensure execute/spawn functions can work without Unit object
When switching to serialization later, the Unit object will not be
serialized, move parameters around instead
2023-10-12 13:37:22 +01:00
Luca Boccassi 154eb43f38 core: ensure execute/spawn functions can work without manager object
When switching to serialization later, the Manager object will not be
serialized, move parameters around instead
2023-10-12 13:37:22 +01:00
Lennart Poettering 2a7451dc5d pid1: serialize pidrefs as pidfds if possible
One major step towards total pidfdification of systemd.
2023-10-05 12:57:05 +02:00
Lennart Poettering 495e75ed5c core: move pid watch/unwatch logic of the service manager to pidfd
This makes sure unit_watch_pid() and unit_unwatch_pid() will track
processes by pidfd if supported. Also ports over some related code.
Should not really change behaviour.

Note that this does *not* add support waiting for POLLIN on the pidfds
as additional exit notification. This is left for a later commit (this
commit is already large enough), in particular as that would add new
logic and not just convert existing logic.
2023-09-28 23:22:58 +02:00
Lennart Poettering e92768004e core: generalize service_arm_timer() for all unit types 2023-09-27 17:37:02 +02:00
Lennart Poettering b0ff583705 swap: also modernize state engine log message generation 2023-09-27 17:31:29 +02:00
Lennart Poettering 4775b55db0 core: port unit_fork_helper_process() and unit_fork_and_watch_rm_rf() to PidRef 2023-09-18 19:08:09 +02:00
Lennart Poettering 37eb258e91 core: port unit_main_pid() + unit_control_pid() to PidRef and drop unit_kill_common()
This ports over unit_main_pid() + unit_control_pid() to return PidRef*
pointers (which also means the underlying UnitVTable function pointers
are changed accordingly).

This then uses te functions to simplify the unit_kill() call, by
avoiding the kill() vtable indirection and instead just suing
unit_main_pid() and unit_control_pid() directly.
2023-09-18 19:08:09 +02:00
Lennart Poettering 7901288ab1 core: port over unit_kill_context() to PidRef 2023-09-18 19:08:09 +02:00
Luca Boccassi fd0a804271 Merge pull request #29130 from poettering/unit-defaults
core: introduce UnitDefaults structure for unit defaults
2023-09-09 19:15:46 +01:00
Lennart Poettering 894a30ef3f core: don't manually destroy timer when we can't spawn a child
Let's stop manually destroying the timers when we fail to spawn a child.
We don't do this in any of the similar codepaths in any of the unit
types, only in two specific ones in socket/swap. Destroying the timer is
unnecessary, since this is done anyway in the _set_state() call of each
unit type if not appropriate, and every failure path here runs through
that anyway.

This brings all these similar codepaths into sync.
2023-09-09 14:10:54 +02:00
Lennart Poettering 436cdf0a07 core: also port swap units to PidRef 2023-09-09 14:10:41 +02:00
Lennart Poettering c9e120e06f manager: move various fields that declare unit defaults into a new structure UnitDefaults
This adds a new structure UnitDefaults which embedds the various default
settings for units we maintain. We so far maintained two sets of
variables for this, one in main.c as static variables and one in the
Manager structure. This moves them into a common structure.

This is most just search/replace, i.e. very dumb refactoring.

The fact that we now use a common structure for this allows us further
refactorings later.

Inspired by the discussions on #27890
2023-09-08 14:19:45 +02:00
Lennart Poettering d1e8e8b5ae tree-wide: drop _pure_ + _const_ from local, static functions
This is supposed to be a help for compilers to apply optimizations on
functions where they can't determine whether they are const/pure on
their own. For static, local functions the compiler can do this on its
own easily however, hence the decoration with pure/const is just noise.
Let's drop it, and let the compiler to its thing better.

(Use it for exported functions, since compilers can't 'reach-over' into
other modules to determine if they are pure, except if LTO is used)
2023-08-10 00:01:04 +08:00
Luca Boccassi 9027aff9d4 Merge pull request #27867 from keszybz/vconsole-reload-again
Restore ordering between vconsole-setup and firstboot services
2023-07-14 23:06:18 +01:00
Daan De Meyer a1af83728f device-util: Declare iterator variables inline 2023-07-12 20:05:18 +02:00
Zbigniew Jędrzejewski-Szmek 84214541fa Revert "pid1: order units using TTYVHangup= after vconsole setup"
This reverts commit e019ea738d.

In the new approach, a lock on /dev/console will be used. This lock will solve
the issue for services which run in early boot. Services which run later are
ordered after sysinit.target, so they'll run much later anyway so this
automatic dependency is not useful. Let's remove it again to make the code
simpler.
2023-07-12 15:54:33 +02:00
Lennart Poettering b2bfd121b7 pid1: also encode whether to send plymouth notifications in UnitVTable 2023-06-30 22:01:02 +02:00