]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
automount: don't cancel mount/umount request on reload/reexec (#3670)
authorMichael Olbrich <m.olbrich@pengutronix.de>
Mon, 25 Jul 2016 18:04:02 +0000 (20:04 +0200)
committerLennart Poettering <lennart@poettering.net>
Mon, 25 Jul 2016 18:04:02 +0000 (20:04 +0200)
All pending tokens are already serialized correctly and will be handled
when the mount unit is done.

Without this a 'daemon-reload' cancels all pending tokens. Any process
waiting for the mount will continue with EHOSTDOWN.
This can happen when the mount unit waits for it's dependencies, e.g.
network, devices, fsck, etc.

src/core/automount.c

index 85803a9c4ab355b101f42d518a024886437a3c2c..4e9891569cfb23fa9e18af145cf491eae4ca9f4f 100644 (file)
@@ -98,9 +98,6 @@ static void unmount_autofs(Automount *a) {
         if (a->pipe_fd < 0)
                 return;
 
-        automount_send_ready(a, a->tokens, -EHOSTDOWN);
-        automount_send_ready(a, a->expire_tokens, -EHOSTDOWN);
-
         a->pipe_event_source = sd_event_source_unref(a->pipe_event_source);
         a->pipe_fd = safe_close(a->pipe_fd);
 
@@ -109,6 +106,9 @@ static void unmount_autofs(Automount *a) {
         if (a->where &&
             (UNIT(a)->manager->exit_code != MANAGER_RELOAD &&
              UNIT(a)->manager->exit_code != MANAGER_REEXECUTE)) {
+                automount_send_ready(a, a->tokens, -EHOSTDOWN);
+                automount_send_ready(a, a->expire_tokens, -EHOSTDOWN);
+
                 r = repeat_unmount(a->where, MNT_DETACH);
                 if (r < 0)
                         log_error_errno(r, "Failed to unmount: %m");