chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
units: introduce umount.target for unmounting all file systems
[elogind.git]
/
src
/
mount.c
diff --git
a/src/mount.c
b/src/mount.c
index db8551e854b2902e6a28ccb2d1310ebdadc5f41f..57c258f9f255908b86eba0d664f7b68fd2e76407 100644
(file)
--- a/
src/mount.c
+++ b/
src/mount.c
@@
-60,15
+60,15
@@
static void mount_init(Unit *u) {
assert(u->meta.load_state == UNIT_STUB);
m->timeout_usec = DEFAULT_TIMEOUT_USEC;
assert(u->meta.load_state == UNIT_STUB);
m->timeout_usec = DEFAULT_TIMEOUT_USEC;
- exec_context_init(&m->exec_context);
-
m->directory_mode = 0755;
m->directory_mode = 0755;
+ exec_context_init(&m->exec_context);
+
/* We need to make sure that /bin/mount is always called in
* the same process group as us, so that the autofs kernel
* side doesn't send us another mount request while we are
* already trying to comply its last one. */
/* We need to make sure that /bin/mount is always called in
* the same process group as us, so that the autofs kernel
* side doesn't send us another mount request while we are
* already trying to comply its last one. */
- m->exec_context.
no_setsid
= true;
+ m->exec_context.
same_pgrp
= true;
m->timer_watch.type = WATCH_INVALID;
m->timer_watch.type = WATCH_INVALID;
@@
-253,7
+253,7
@@
static int mount_add_target_links(Mount *m) {
else
target = SPECIAL_LOCAL_FS_TARGET;
else
target = SPECIAL_LOCAL_FS_TARGET;
- if ((r = manager_load_unit(m->meta.manager, target, NULL, &tu)) < 0)
+ if ((r = manager_load_unit(m->meta.manager, target, NULL,
NULL,
&tu)) < 0)
return r;
if (automount && m->meta.manager->running_as == MANAGER_SYSTEM) {
return r;
if (automount && m->meta.manager->running_as == MANAGER_SYSTEM) {
@@
-262,11
+262,7
@@
static int mount_add_target_links(Mount *m) {
if ((r = unit_load_related_unit(UNIT(m), ".automount", &am)) < 0)
return r;
if ((r = unit_load_related_unit(UNIT(m), ".automount", &am)) < 0)
return r;
- if ((r = unit_add_dependency(tu, UNIT_WANTS, UNIT(am), true)) < 0)
- return r;
-
- return unit_add_dependency(UNIT(am), UNIT_BEFORE, tu, true);
-
+ return unit_add_two_dependencies(tu, UNIT_AFTER, UNIT_WANTS, UNIT(am), true);
} else {
if (!noauto && handle)
} else {
if (!noauto && handle)
@@
-371,6
+367,10
@@
static int mount_load(Unit *u) {
if ((r = unit_add_default_cgroup(u)) < 0)
return r;
if ((r = unit_add_default_cgroup(u)) < 0)
return r;
+
+ if (m->meta.default_dependencies && !path_equal(m->where, "/"))
+ if ((r = unit_add_two_dependencies_by_name(UNIT(m), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_UMOUNT_TARGET, NULL, true)) < 0)
+ return r;
}
return mount_verify(m);
}
return mount_verify(m);
@@
-538,6
+538,7
@@
static int mount_spawn(Mount *m, ExecCommand *c, pid_t *_pid) {
m->meta.manager->environment,
true,
true,
m->meta.manager->environment,
true,
true,
+ true,
m->meta.manager->confirm_spawn,
m->meta.cgroup_bondings,
&pid)) < 0)
m->meta.manager->confirm_spawn,
m->meta.cgroup_bondings,
&pid)) < 0)
@@
-940,7
+941,7
@@
static void mount_sigchld_event(Unit *u, pid_t pid, int code, int status) {
m->failure = m->failure || !success;
if (m->control_command) {
m->failure = m->failure || !success;
if (m->control_command) {
- exec_status_
fill
(&m->control_command->exec_status, pid, code, status);
+ exec_status_
exit
(&m->control_command->exec_status, pid, code, status);
m->control_command = NULL;
m->control_command_id = _MOUNT_EXEC_COMMAND_INVALID;
}
m->control_command = NULL;
m->control_command_id = _MOUNT_EXEC_COMMAND_INVALID;
}
@@
-1552,6
+1553,7
@@
const UnitVTable mount_vtable = {
.no_alias = true,
.no_instances = true,
.no_isolate = true,
.no_alias = true,
.no_instances = true,
.no_isolate = true,
+ .show_status = true,
.init = mount_init,
.load = mount_load,
.init = mount_init,
.load = mount_load,