X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fmount.c;h=b49c64aeabc7b287c171cc8bf45fcc7b4d7f36fa;hb=bb00e604097fba830af1dc078d78aff278dfcd37;hp=5577f16dfd7a18ff0cba8919d27bfc886d0d7129;hpb=a2e0f3d3948d65df01e372ede12391be93d4e155;p=elogind.git diff --git a/src/mount.c b/src/mount.c index 5577f16df..b49c64aea 100644 --- a/src/mount.c +++ b/src/mount.c @@ -35,6 +35,7 @@ #include "unit-name.h" #include "mount.h" #include "dbus-mount.h" +#include "special.h" static const UnitActiveState state_translation_table[_MOUNT_STATE_MAX] = { [MOUNT_DEAD] = UNIT_INACTIVE, @@ -49,7 +50,7 @@ static const UnitActiveState state_translation_table[_MOUNT_STATE_MAX] = { [MOUNT_REMOUNTING_SIGKILL] = UNIT_ACTIVE_RELOADING, [MOUNT_UNMOUNTING_SIGTERM] = UNIT_DEACTIVATING, [MOUNT_UNMOUNTING_SIGKILL] = UNIT_DEACTIVATING, - [MOUNT_MAINTAINANCE] = UNIT_INACTIVE, + [MOUNT_MAINTENANCE] = UNIT_INACTIVE, }; static void mount_init(Unit *u) { @@ -253,7 +254,7 @@ static int mount_add_target_links(Mount *m) { if ((r = manager_load_unit(UNIT(m)->meta.manager, target, NULL, &tu)) < 0) return r; - if (automount && m->meta.manager->running_as != MANAGER_SESSION) { + if (automount && m->meta.manager->running_as == MANAGER_SYSTEM) { Unit *am; if ((r = unit_load_related_unit(UNIT(m), ".automount", &am)) < 0) @@ -267,7 +268,7 @@ static int mount_add_target_links(Mount *m) { } else { if (!noauto && handle) - if (user || m->meta.manager->running_as != MANAGER_SESSION) + if (user || m->meta.manager->running_as == MANAGER_SYSTEM) if ((r = unit_add_dependency(tu, UNIT_WANTS, UNIT(m), true)) < 0) return r; @@ -340,9 +341,7 @@ static int mount_load(Unit *u) { what = m->parameters_proc_self_mountinfo.what; if (what) - if ((r = unit_add_node_link(u, what, - (u->meta.manager->running_as == MANAGER_INIT || - u->meta.manager->running_as == MANAGER_SYSTEM))) < 0) + if ((r = unit_add_node_link(u, what, u->meta.manager->running_as == MANAGER_SYSTEM)) < 0) return r; if ((r = mount_add_mount_links(m)) < 0) @@ -416,7 +415,7 @@ static void mount_set_state(Mount *m, MountState state) { state == MOUNT_REMOUNTING_SIGKILL || state == MOUNT_UNMOUNTING_SIGTERM || state == MOUNT_UNMOUNTING_SIGKILL || - state == MOUNT_MAINTAINANCE) + state == MOUNT_MAINTENANCE) mount_notify_automount(m, -ENODEV); if (state != old_state) @@ -506,8 +505,8 @@ static void mount_dump(Unit *u, FILE *f, const char *prefix) { if (m->control_pid > 0) fprintf(f, - "%sControl PID: %llu\n", - prefix, (unsigned long long) m->control_pid); + "%sControl PID: %lu\n", + prefix, (unsigned long) m->control_pid); exec_context_dump(&m->exec_context, f, prefix); } @@ -555,7 +554,7 @@ static void mount_enter_dead(Mount *m, bool success) { if (!success) m->failure = true; - mount_set_state(m, m->failure ? MOUNT_MAINTAINANCE : MOUNT_DEAD); + mount_set_state(m, m->failure ? MOUNT_MAINTENANCE : MOUNT_DEAD); } static void mount_enter_mounted(Mount *m, bool success) { @@ -646,7 +645,7 @@ static void mount_enter_unmounting(Mount *m, bool success) { return; fail: - log_warning("%s failed to run umount exectuable: %s", UNIT(m)->meta.id, strerror(-r)); + log_warning("%s failed to run 'umount' task: %s", UNIT(m)->meta.id, strerror(-r)); mount_enter_mounted(m, false); } @@ -689,7 +688,7 @@ static void mount_enter_mounting(Mount *m) { return; fail: - log_warning("%s failed to run mount exectuable: %s", UNIT(m)->meta.id, strerror(-r)); + log_warning("%s failed to run 'mount' task: %s", UNIT(m)->meta.id, strerror(-r)); mount_enter_dead(m, false); } @@ -780,7 +779,7 @@ static int mount_start(Unit *u) { m->state == MOUNT_MOUNTING_SIGKILL) return 0; - assert(m->state == MOUNT_DEAD || m->state == MOUNT_MAINTAINANCE); + assert(m->state == MOUNT_DEAD || m->state == MOUNT_MAINTENANCE); m->failure = false; mount_enter_mounting(m); @@ -839,7 +838,7 @@ static int mount_serialize(Unit *u, FILE *f, FDSet *fds) { unit_serialize_item(u, f, "failure", yes_no(m->failure)); if (m->control_pid > 0) - unit_serialize_item_format(u, f, "control-pid", "%u", (unsigned) m->control_pid); + unit_serialize_item_format(u, f, "control-pid", "%lu", (unsigned long) m->control_pid); if (m->control_command_id >= 0) unit_serialize_item(u, f, "control-command", mount_exec_command_to_string(m->control_command_id)); @@ -872,12 +871,12 @@ static int mount_deserialize_item(Unit *u, const char *key, const char *value, F m->failure = b || m->failure; } else if (streq(key, "control-pid")) { - unsigned pid; + pid_t pid; - if ((r = safe_atou(value, &pid)) < 0 || pid <= 0) + if ((r = parse_pid(value, &pid)) < 0) log_debug("Failed to parse control-pid value %s", value); else - m->control_pid = (pid_t) pid; + m->control_pid = pid; } else if (streq(key, "control-command")) { MountExecCommand id; @@ -921,12 +920,14 @@ static void mount_sigchld_event(Unit *u, pid_t pid, int code, int status) { assert(m); assert(pid >= 0); - success = is_clean_exit(code, status); - m->failure = m->failure || !success; + if (pid != m->control_pid) + return; - assert(m->control_pid == pid); m->control_pid = 0; + success = is_clean_exit(code, status); + m->failure = m->failure || !success; + if (m->control_command) { exec_status_fill(&m->control_command->exec_status, pid, code, status); m->control_command = NULL; @@ -1433,7 +1434,7 @@ void mount_fd_event(Manager *m, int events) { switch (mount->state) { case MOUNT_DEAD: - case MOUNT_MAINTAINANCE: + case MOUNT_MAINTENANCE: mount_enter_mounted(mount, true); break; @@ -1521,7 +1522,7 @@ static const char* const mount_state_table[_MOUNT_STATE_MAX] = { [MOUNT_REMOUNTING_SIGKILL] = "remounting-sigkill", [MOUNT_UNMOUNTING_SIGTERM] = "unmounting-sigterm", [MOUNT_UNMOUNTING_SIGKILL] = "unmounting-sigkill", - [MOUNT_MAINTAINANCE] = "maintainance" + [MOUNT_MAINTENANCE] = "maintenance" }; DEFINE_STRING_TABLE_LOOKUP(mount_state, MountState);