automount: don't lstat(2) upon umount request (#6086)
authorFranck Bui <fbui@suse.com>
Mon, 3 Jul 2017 12:48:21 +0000 (14:48 +0200)
committerLennart Poettering <lennart@poettering.net>
Mon, 3 Jul 2017 12:48:21 +0000 (14:48 +0200)
When umounting an NFS filesystem, it is not safe to lstat(2) the mountpoint at
all as that can block indefinitely if the NFS server is down.

umount() will not block, but lstat() will.

This patch therefore removes the call to lstat(2) and defers the handling of
any error to the child process which will issue the umount call.

src/core/automount.c

index 6a5612a..0f72854 100644 (file)
@@ -970,7 +970,6 @@ static int automount_dispatch_io(sd_event_source *s, int fd, uint32_t events, vo
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         union autofs_v5_packet_union packet;
         Automount *a = AUTOMOUNT(userdata);
-        struct stat st;
         Unit *trigger;
         int r;
 
@@ -1032,18 +1031,6 @@ static int automount_dispatch_io(sd_event_source *s, int fd, uint32_t events, vo
                         goto fail;
                 }
 
-                /* Before we do anything, let's see if somebody is playing games with us? */
-                if (lstat(a->where, &st) < 0) {
-                        log_unit_warning_errno(UNIT(a), errno, "Failed to stat automount point: %m");
-                        goto fail;
-                }
-
-                if (!S_ISDIR(st.st_mode) || st.st_dev == a->dev_id) {
-                        log_unit_info(UNIT(a), "Automount point already unmounted?");
-                        automount_send_ready(a, a->expire_tokens, 0);
-                        break;
-                }
-
                 trigger = UNIT_TRIGGER(UNIT(a));
                 if (!trigger) {
                         log_unit_error(UNIT(a), "Unit to trigger vanished.");