X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fmount.c;h=b99e5ffe8b9f9e28b0955dde12133db87bb72acd;hp=f0336163ace7ffa7f885f58553f2503b6d597938;hb=b58b41160fde88a82cba1ddec4be7dfb08825e35;hpb=6124958c7bda3fed9b079e8217781480797703f5 diff --git a/src/mount.c b/src/mount.c index f0336163a..b99e5ffe8 100644 --- a/src/mount.c +++ b/src/mount.c @@ -42,15 +42,15 @@ static const UnitActiveState state_translation_table[_MOUNT_STATE_MAX] = { [MOUNT_MOUNTING] = UNIT_ACTIVATING, [MOUNT_MOUNTING_DONE] = UNIT_ACTIVE, [MOUNT_MOUNTED] = UNIT_ACTIVE, - [MOUNT_REMOUNTING] = UNIT_ACTIVE_RELOADING, + [MOUNT_REMOUNTING] = UNIT_RELOADING, [MOUNT_UNMOUNTING] = UNIT_DEACTIVATING, [MOUNT_MOUNTING_SIGTERM] = UNIT_DEACTIVATING, [MOUNT_MOUNTING_SIGKILL] = UNIT_DEACTIVATING, - [MOUNT_REMOUNTING_SIGTERM] = UNIT_ACTIVE_RELOADING, - [MOUNT_REMOUNTING_SIGKILL] = UNIT_ACTIVE_RELOADING, + [MOUNT_REMOUNTING_SIGTERM] = UNIT_RELOADING, + [MOUNT_REMOUNTING_SIGKILL] = UNIT_RELOADING, [MOUNT_UNMOUNTING_SIGTERM] = UNIT_DEACTIVATING, [MOUNT_UNMOUNTING_SIGKILL] = UNIT_DEACTIVATING, - [MOUNT_MAINTENANCE] = UNIT_INACTIVE_MAINTENANCE + [MOUNT_MAINTENANCE] = UNIT_MAINTENANCE }; static void mount_init(Unit *u) { @@ -62,6 +62,8 @@ static void mount_init(Unit *u) { m->timeout_usec = DEFAULT_TIMEOUT_USEC; exec_context_init(&m->exec_context); + m->directory_mode = 0755; + /* 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 @@ -260,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_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) @@ -497,7 +495,8 @@ static void mount_dump(Unit *u, FILE *f, const char *prefix) { "%sFrom /etc/fstab: %s\n" "%sFrom /proc/self/mountinfo: %s\n" "%sFrom fragment: %s\n" - "%sKillMode: %s\n", + "%sKillMode: %s\n" + "%sDirectoryMode: %04o\n", prefix, mount_state_to_string(m->state), prefix, m->where, prefix, strna(p->what), @@ -506,7 +505,8 @@ static void mount_dump(Unit *u, FILE *f, const char *prefix) { prefix, yes_no(m->from_etc_fstab), prefix, yes_no(m->from_proc_self_mountinfo), prefix, yes_no(m->from_fragment), - prefix, kill_mode_to_string(m->kill_mode)); + prefix, kill_mode_to_string(m->kill_mode), + prefix, m->directory_mode); if (m->control_pid > 0) fprintf(f, @@ -662,6 +662,8 @@ static void mount_enter_mounting(Mount *m) { m->control_command_id = MOUNT_EXEC_MOUNT; m->control_command = m->exec_command + MOUNT_EXEC_MOUNT; + mkdir_p(m->where, m->directory_mode); + if (m->from_fragment) r = exec_command_set( m->control_command, @@ -934,7 +936,7 @@ static void mount_sigchld_event(Unit *u, pid_t pid, int code, int status) { 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; }