orangefs: do not wait for timeout if umounting
authorMartin Brandenburg <martin@omnibond.com>
Tue, 25 Apr 2017 19:38:07 +0000 (15:38 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 24 Mar 2018 10:00:16 +0000 (11:00 +0100)
[ Upstream commit b5a9d61eebdd0016ccb383b25a5c3d04977a6549 ]

When the computer is turned off, all the processes are killed and then
all the filesystems are umounted.  OrangeFS should not wait for the
userspace daemon to come back in that case.

This only works for plain umount(2).  To actually take advantage of this
interactively, `umount -f' is needed; otherwise umount will issue a
statfs first, which will wait for the userspace daemon to come back.

Signed-off-by: Martin Brandenburg <martin@omnibond.com>
Signed-off-by: Mike Marshall <hubcap@omnibond.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/orangefs/waitqueue.c

index f61b00887481f7e0417b528133e614b405d8f9e9..cbca58ba008a37424afc1d3e5963aad2ff03999a 100644 (file)
@@ -124,7 +124,14 @@ retry_servicing:
                gossip_debug(GOSSIP_WAIT_DEBUG,
                             "%s:client core is NOT in service.\n",
                             __func__);
-               timeout = op_timeout_secs * HZ;
+               /*
+                * Don't wait for the userspace component to return if
+                * the filesystem is being umounted anyway.
+                */
+               if (op->upcall.type == ORANGEFS_VFS_OP_FS_UMOUNT)
+                       timeout = 0;
+               else
+                       timeout = op_timeout_secs * HZ;
        }
        spin_unlock(&orangefs_request_list_lock);