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