X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fmount.c;h=f978a5467d2f542e76046f7292ecafa8168585b0;hb=26742b3fd8776c6c64e3c1035adc2599ddeb76d1;hp=5b433c970a85466f24a290b032896ff9f9446ee3;hpb=ba035df230e41bf9d70ebb47915c9472b7884412;p=elogind.git diff --git a/src/mount.c b/src/mount.c index 5b433c970..f978a5467 100644 --- a/src/mount.c +++ b/src/mount.c @@ -36,6 +36,7 @@ #include "dbus-mount.h" #include "special.h" #include "bus-errors.h" +#include "exit-status.h" static const UnitActiveState state_translation_table[_MOUNT_STATE_MAX] = { [MOUNT_DEAD] = UNIT_INACTIVE, @@ -554,7 +555,8 @@ static void mount_set_state(Mount *m, MountState state) { mount_state_to_string(old_state), mount_state_to_string(state)); - unit_notify(UNIT(m), state_translation_table[old_state], state_translation_table[state]); + unit_notify(UNIT(m), state_translation_table[old_state], state_translation_table[state], !m->reload_failure); + m->reload_failure = false; } static int mount_coldplug(Unit *u) { @@ -910,7 +912,8 @@ static void mount_enter_remounting(Mount *m, bool success) { fail: log_warning("%s failed to run 'remount' task: %s", m->meta.id, strerror(-r)); - mount_enter_mounted(m, false); + m->reload_failure = true; + mount_enter_mounted(m, true); } static int mount_start(Unit *u) { @@ -1098,9 +1101,6 @@ static void mount_sigchld_event(Unit *u, pid_t pid, int code, int status) { case MOUNT_MOUNTING_DONE: case MOUNT_MOUNTING_SIGKILL: case MOUNT_MOUNTING_SIGTERM: - case MOUNT_REMOUNTING: - case MOUNT_REMOUNTING_SIGKILL: - case MOUNT_REMOUNTING_SIGTERM: if (success) mount_enter_mounted(m, true); @@ -1110,6 +1110,18 @@ static void mount_sigchld_event(Unit *u, pid_t pid, int code, int status) { mount_enter_dead(m, false); break; + case MOUNT_REMOUNTING: + case MOUNT_REMOUNTING_SIGKILL: + case MOUNT_REMOUNTING_SIGTERM: + + m->reload_failure = !success; + if (m->from_proc_self_mountinfo) + mount_enter_mounted(m, true); + else + mount_enter_dead(m, true); + + break; + case MOUNT_UNMOUNTING: case MOUNT_UNMOUNTING_SIGKILL: case MOUNT_UNMOUNTING_SIGTERM: @@ -1147,7 +1159,8 @@ static void mount_timer_event(Unit *u, uint64_t elapsed, Watch *w) { case MOUNT_REMOUNTING: log_warning("%s remounting timed out. Stopping.", u->meta.id); - mount_enter_signal(m, MOUNT_REMOUNTING_SIGTERM, false); + m->reload_failure = true; + mount_enter_mounted(m, true); break; case MOUNT_UNMOUNTING: