chiark / gitweb /
swap: major rework, use /sbin/swapon for setting up swaps, fix merging of aliased...
[elogind.git] / src / swap.h
index f54a9ee..8a60416 100644 (file)
@@ -1,4 +1,4 @@
-/*-*- Mode: C; c-basic-offset: 8 -*-*/
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
 
 #ifndef fooswaphfoo
 #define fooswaphfoo
@@ -29,43 +29,85 @@ typedef struct Swap Swap;
 
 typedef enum SwapState {
         SWAP_DEAD,
+        SWAP_ACTIVATING,
         SWAP_ACTIVE,
-        SWAP_MAINTAINANCE,
+        SWAP_DEACTIVATING,
+        SWAP_ACTIVATING_SIGTERM,
+        SWAP_ACTIVATING_SIGKILL,
+        SWAP_DEACTIVATING_SIGTERM,
+        SWAP_DEACTIVATING_SIGKILL,
+        SWAP_FAILED,
         _SWAP_STATE_MAX,
         _SWAP_STATE_INVALID = -1
 } SwapState;
 
+typedef enum SwapExecCommand {
+        SWAP_EXEC_ACTIVATE,
+        SWAP_EXEC_DEACTIVATE,
+        _SWAP_EXEC_COMMAND_MAX,
+        _SWAP_EXEC_COMMAND_INVALID = -1
+} SwapExecCommand;
+
 typedef struct SwapParameters {
         char *what;
         int priority;
         bool noauto:1;
+        bool nofail:1;
         bool handle:1;
 } SwapParameters;
 
 struct Swap {
         Meta meta;
 
+        char *what;
+
         SwapParameters parameters_etc_fstab;
         SwapParameters parameters_proc_swaps;
         SwapParameters parameters_fragment;
 
-        char *what;
-
         bool from_etc_fstab:1;
         bool from_proc_swaps:1;
         bool from_fragment:1;
 
+        bool failure:1;
+
+        /* Used while looking for swaps that vanished or got added
+         * from/to /proc/swaps */
+        bool is_active:1;
+        bool just_activated:1;
+
+        usec_t timeout_usec;
+
+        ExecCommand exec_command[_SWAP_EXEC_COMMAND_MAX];
+        ExecContext exec_context;
+
         SwapState state, deserialized_state;
+
+        ExecCommand* control_command;
+        SwapExecCommand control_command_id;
+        pid_t control_pid;
+
+        Watch timer_watch;
+
+        /* In order to be able to distuingish dependencies on
+        different device nodes we might end up creating multiple
+        devices for the same swap. We chain them up here. */
+
+        LIST_FIELDS(struct Swap, same_proc_swaps);
 };
 
 extern const UnitVTable swap_vtable;
 
-int swap_add_one(Manager *m, const char *what, int prio, bool no_auto, bool handle, bool from_proc_swap);
+int swap_add_one(Manager *m, const char *what, const char *what_proc_swaps, int prio, bool no_auto, bool no_fail, bool handle, bool set_flags);
 
 int swap_add_one_mount_link(Swap *s, Mount *m);
 
+int swap_dispatch_reload(Manager *m);
+
 const char* swap_state_to_string(SwapState i);
 SwapState swap_state_from_string(const char *s);
 
+const char* swap_exec_command_to_string(SwapExecCommand i);
+SwapExecCommand swap_exec_command_from_string(const char *s);
 
 #endif