X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fmount.c;h=8a9ab167210373f0a4cbec4d2bb9665954c68c45;hb=c826cda421f0272275342173e16250adcdf6fbd4;hp=aae9d982ae2e478ebd565a8e2bb7e47305e5f7aa;hpb=e0fa621b8b52da4d95bf5918eb998c9166e4bc7c;p=elogind.git diff --git a/src/mount.c b/src/mount.c index aae9d982a..8a9ab1672 100644 --- a/src/mount.c +++ b/src/mount.c @@ -64,6 +64,7 @@ static void mount_init(Unit *u) { m->directory_mode = 0755; exec_context_init(&m->exec_context); + m->exec_context.std_output = EXEC_OUTPUT_KMSG; /* We need to make sure that /bin/mount is always called in * the same process group as us, so that the autofs kernel @@ -305,7 +306,7 @@ static int mount_add_target_links(Mount *m) { return r; if (after) - if ((r = unit_add_dependency_by_name(tu, UNIT_AFTER, after, NULL, true)) < 0) + if ((r = unit_add_dependency_by_name(UNIT(m), UNIT_AFTER, after, NULL, true)) < 0) return r; if (automount && m->meta.manager->running_as == MANAGER_SYSTEM) { @@ -372,6 +373,7 @@ static int mount_add_device_links(Mount *m) { } if (p->passno > 0 && + !mount_is_bind(p) && UNIT(m)->meta.manager->running_as == MANAGER_SYSTEM && !path_equal(m->where, "/")) { char *name; @@ -464,6 +466,9 @@ static int mount_load(Unit *u) { /* This is a new unit? Then let's add in some extras */ if (u->meta.load_state == UNIT_LOADED) { + if ((r = unit_add_exec_dependencies(u, &m->exec_context)) < 0) + return r; + if (m->meta.fragment_path) m->from_fragment = true; @@ -724,9 +729,9 @@ static void mount_enter_signal(Mount *m, MountState state, bool success) { state == MOUNT_REMOUNTING_SIGTERM) ? m->exec_context.kill_signal : SIGKILL; if (m->control_pid > 0) { - if (kill(m->exec_context.kill_mode == KILL_PROCESS_GROUP ? - -m->control_pid : - m->control_pid, sig) < 0 && errno != ESRCH) + if (kill_and_sigcont(m->exec_context.kill_mode == KILL_PROCESS_GROUP ? + -m->control_pid : + m->control_pid, sig) < 0 && errno != ESRCH) log_warning("Failed to kill control process %li: %m", (long) m->control_pid); else @@ -745,7 +750,7 @@ static void mount_enter_signal(Mount *m, MountState state, bool success) { if ((r = set_put(pid_set, LONG_TO_PTR(m->control_pid))) < 0) goto fail; - if ((r = cgroup_bonding_kill_list(m->meta.cgroup_bondings, sig, pid_set)) < 0) { + if ((r = cgroup_bonding_kill_list(m->meta.cgroup_bondings, sig, true, pid_set)) < 0) { if (r != -EAGAIN && r != -ESRCH && r != -ENOENT) log_warning("Failed to kill control group: %s", strerror(-r)); } else if (r > 0) @@ -1673,7 +1678,7 @@ static int mount_kill(Unit *u, KillWho who, KillMode mode, int signo, DBusError goto finish; } - if ((q = cgroup_bonding_kill_list(m->meta.cgroup_bondings, signo, pid_set)) < 0) + if ((q = cgroup_bonding_kill_list(m->meta.cgroup_bondings, signo, false, pid_set)) < 0) if (r != -EAGAIN && r != -ESRCH && r != -ENOENT) r = q; }