]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/core/mount.h
core: general cgroup rework
[thirdparty/systemd.git] / src / core / mount.h
CommitLineData
03467c88 1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
5cb5a6ff 2
c2f1db8f 3#pragma once
5cb5a6ff 4
a7334b09
LP
5/***
6 This file is part of systemd.
7
8 Copyright 2010 Lennart Poettering
9
10 systemd is free software; you can redistribute it and/or modify it
5430f7f2
LP
11 under the terms of the GNU Lesser General Public License as published by
12 the Free Software Foundation; either version 2.1 of the License, or
a7334b09
LP
13 (at your option) any later version.
14
15 systemd is distributed in the hope that it will be useful, but
16 WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5430f7f2 18 Lesser General Public License for more details.
a7334b09 19
5430f7f2 20 You should have received a copy of the GNU Lesser General Public License
a7334b09
LP
21 along with systemd; If not, see <http://www.gnu.org/licenses/>.
22***/
23
5cb5a6ff
LP
24typedef struct Mount Mount;
25
87f0e418 26#include "unit.h"
4819ff03 27#include "kill.h"
4ad49000
LP
28#include "execute.h"
29#include "cgroup.h"
5cb5a6ff
LP
30
31typedef enum MountState {
32 MOUNT_DEAD,
e537352b
LP
33 MOUNT_MOUNTING, /* /bin/mount is running, but the mount is not done yet. */
34 MOUNT_MOUNTING_DONE, /* /bin/mount is running, and the mount is done. */
5cb5a6ff 35 MOUNT_MOUNTED,
e537352b 36 MOUNT_REMOUNTING,
5cb5a6ff 37 MOUNT_UNMOUNTING,
e537352b
LP
38 MOUNT_MOUNTING_SIGTERM,
39 MOUNT_MOUNTING_SIGKILL,
40 MOUNT_REMOUNTING_SIGTERM,
41 MOUNT_REMOUNTING_SIGKILL,
42 MOUNT_UNMOUNTING_SIGTERM,
43 MOUNT_UNMOUNTING_SIGKILL,
fdf20a31 44 MOUNT_FAILED,
e537352b
LP
45 _MOUNT_STATE_MAX,
46 _MOUNT_STATE_INVALID = -1
5cb5a6ff
LP
47} MountState;
48
e537352b
LP
49typedef enum MountExecCommand {
50 MOUNT_EXEC_MOUNT,
51 MOUNT_EXEC_UNMOUNT,
52 MOUNT_EXEC_REMOUNT,
53 _MOUNT_EXEC_COMMAND_MAX,
54 _MOUNT_EXEC_COMMAND_INVALID = -1
55} MountExecCommand;
56
57typedef struct MountParameters {
58 char *what;
59 char *options;
60 char *fstype;
9fff8a1f 61 int passno;
e537352b
LP
62} MountParameters;
63
9d2f5178
LP
64typedef enum MountResult {
65 MOUNT_SUCCESS,
66 MOUNT_FAILURE_RESOURCES,
67 MOUNT_FAILURE_TIMEOUT,
68 MOUNT_FAILURE_EXIT_CODE,
69 MOUNT_FAILURE_SIGNAL,
70 MOUNT_FAILURE_CORE_DUMP,
71 _MOUNT_RESULT_MAX,
72 _MOUNT_RESULT_INVALID = -1
73} MountResult;
74
5cb5a6ff 75struct Mount {
ac155bb8 76 Unit meta;
5cb5a6ff 77
e537352b 78 char *where;
b08d03ff 79
e537352b
LP
80 MountParameters parameters_proc_self_mountinfo;
81 MountParameters parameters_fragment;
f50e0a01 82
f50e0a01 83 bool from_proc_self_mountinfo:1;
e537352b 84 bool from_fragment:1;
ef734fd6
LP
85
86 /* Used while looking for mount points that vanished or got
87 * added from/to /proc/self/mountinfo */
e537352b
LP
88 bool is_mounted:1;
89 bool just_mounted:1;
90 bool just_changed:1;
91
9d2f5178
LP
92 MountResult result;
93 MountResult reload_result;
e537352b 94
3e5235b0
LP
95 mode_t directory_mode;
96
7fab9d01
LP
97 usec_t timeout_usec;
98
e537352b 99 ExecCommand exec_command[_MOUNT_EXEC_COMMAND_MAX];
4ad49000 100
e537352b 101 ExecContext exec_context;
4819ff03 102 KillContext kill_context;
4ad49000 103 CGroupContext cgroup_context;
e537352b 104
a16e1123 105 MountState state, deserialized_state;
e537352b 106
e537352b 107 ExecCommand* control_command;
a16e1123 108 MountExecCommand control_command_id;
e537352b
LP
109 pid_t control_pid;
110
111 Watch timer_watch;
5cb5a6ff
LP
112};
113
87f0e418 114extern const UnitVTable mount_vtable;
5cb5a6ff 115
ef734fd6
LP
116void mount_fd_event(Manager *m, int events);
117
44a6b1b6
ZJS
118const char* mount_state_to_string(MountState i) _const_;
119MountState mount_state_from_string(const char *s) _pure_;
a16e1123 120
44a6b1b6
ZJS
121const char* mount_exec_command_to_string(MountExecCommand i) _const_;
122MountExecCommand mount_exec_command_from_string(const char *s) _pure_;
a16e1123 123
44a6b1b6
ZJS
124const char* mount_result_to_string(MountResult i) _const_;
125MountResult mount_result_from_string(const char *s) _pure_;
20ad4cfd
ZJS
126
127void warn_if_dir_nonempty(const char *unit, const char* where);