]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/core/swap.h
Merge pull request #17732 from yuwata/core-use-synthetic_errno
[thirdparty/systemd.git] / src / core / swap.h
1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
2 #pragma once
3
4 /***
5 Copyright © 2010 Maarten Lankhorst
6 ***/
7
8 #include "sd-device.h"
9 #include "unit.h"
10
11 typedef struct Swap Swap;
12
13 typedef enum SwapExecCommand {
14 SWAP_EXEC_ACTIVATE,
15 SWAP_EXEC_DEACTIVATE,
16 _SWAP_EXEC_COMMAND_MAX,
17 _SWAP_EXEC_COMMAND_INVALID = -1
18 } SwapExecCommand;
19
20 typedef enum SwapResult {
21 SWAP_SUCCESS,
22 SWAP_FAILURE_RESOURCES,
23 SWAP_FAILURE_TIMEOUT,
24 SWAP_FAILURE_EXIT_CODE,
25 SWAP_FAILURE_SIGNAL,
26 SWAP_FAILURE_CORE_DUMP,
27 SWAP_FAILURE_START_LIMIT_HIT,
28 _SWAP_RESULT_MAX,
29 _SWAP_RESULT_INVALID = -1
30 } SwapResult;
31
32 typedef struct SwapParameters {
33 char *what;
34 char *options;
35 int priority;
36 bool priority_set;
37 } SwapParameters;
38
39 struct Swap {
40 Unit meta;
41
42 char *what;
43
44 /* If the device has already shown up, this is the device
45 * node, which might be different from what, due to
46 * symlinks */
47 char *devnode;
48
49 SwapParameters parameters_proc_swaps;
50 SwapParameters parameters_fragment;
51
52 bool from_proc_swaps:1;
53 bool from_fragment:1;
54
55 /* Used while looking for swaps that vanished or got added
56 * from/to /proc/swaps */
57 bool is_active:1;
58 bool just_activated:1;
59
60 SwapResult result;
61 SwapResult clean_result;
62
63 usec_t timeout_usec;
64
65 ExecCommand exec_command[_SWAP_EXEC_COMMAND_MAX];
66 ExecContext exec_context;
67 KillContext kill_context;
68 CGroupContext cgroup_context;
69
70 ExecRuntime *exec_runtime;
71 DynamicCreds dynamic_creds;
72
73 SwapState state, deserialized_state;
74
75 ExecCommand* control_command;
76 SwapExecCommand control_command_id;
77 pid_t control_pid;
78
79 sd_event_source *timer_event_source;
80
81 /* In order to be able to distinguish dependencies on
82 different device nodes we might end up creating multiple
83 devices for the same swap. We chain them up here. */
84
85 LIST_FIELDS(struct Swap, same_devnode);
86 };
87
88 extern const UnitVTable swap_vtable;
89
90 int swap_process_device_new(Manager *m, sd_device *dev);
91 int swap_process_device_remove(Manager *m, sd_device *dev);
92
93 const char* swap_exec_command_to_string(SwapExecCommand i) _const_;
94 SwapExecCommand swap_exec_command_from_string(const char *s) _pure_;
95
96 const char* swap_result_to_string(SwapResult i) _const_;
97 SwapResult swap_result_from_string(const char *s) _pure_;
98
99 DEFINE_CAST(SWAP, Swap);