]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blobdiff - releases/3.6.7/nfsv3-make-v3-mounts-fail-with-etimedouts-instead-eio-on-mountd-timeouts.patch
Linux 3.6.7
[thirdparty/kernel/stable-queue.git] / releases / 3.6.7 / nfsv3-make-v3-mounts-fail-with-etimedouts-instead-eio-on-mountd-timeouts.patch
diff --git a/releases/3.6.7/nfsv3-make-v3-mounts-fail-with-etimedouts-instead-eio-on-mountd-timeouts.patch b/releases/3.6.7/nfsv3-make-v3-mounts-fail-with-etimedouts-instead-eio-on-mountd-timeouts.patch
new file mode 100644 (file)
index 0000000..601d2a3
--- /dev/null
@@ -0,0 +1,38 @@
+From acce94e68a0f346115fd41cdc298197d2d5a59ad Mon Sep 17 00:00:00 2001
+From: Scott Mayhew <smayhew@redhat.com>
+Date: Tue, 16 Oct 2012 13:22:19 -0400
+Subject: nfsv3: Make v3 mounts fail with ETIMEDOUTs instead EIO on mountd timeouts
+
+From: Scott Mayhew <smayhew@redhat.com>
+
+commit acce94e68a0f346115fd41cdc298197d2d5a59ad upstream.
+
+In very busy v3 environment, rpc.mountd can respond to the NULL
+procedure but not the MNT procedure in a timely manner causing
+the MNT procedure to time out. The problem is the mount system
+call returns EIO which causes the mount to fail, instead of
+ETIMEDOUT, which would cause the mount to be retried.
+
+This patch sets the RPC_TASK_SOFT|RPC_TASK_TIMEOUT flags to
+the rpc_call_sync() call in nfs_mount() which causes
+ETIMEDOUT to be returned on timed out connections.
+
+Signed-off-by: Steve Dickson <steved@redhat.com>
+Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ fs/nfs/mount_clnt.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/fs/nfs/mount_clnt.c
++++ b/fs/nfs/mount_clnt.c
+@@ -181,7 +181,7 @@ int nfs_mount(struct nfs_mount_request *
+       else
+               msg.rpc_proc = &mnt_clnt->cl_procinfo[MOUNTPROC_MNT];
+-      status = rpc_call_sync(mnt_clnt, &msg, 0);
++      status = rpc_call_sync(mnt_clnt, &msg, RPC_TASK_SOFT|RPC_TASK_TIMEOUT);
+       rpc_shutdown_client(mnt_clnt);
+       if (status < 0)