]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
SUNRPC: Make "no retrans timeout" soft tasks behave like softconn for timeouts
authorTrond Myklebust <trondmy@gmail.com>
Sun, 7 Apr 2019 17:58:55 +0000 (13:58 -0400)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Thu, 25 Apr 2019 18:18:13 +0000 (14:18 -0400)
If a soft NFSv4 request is sent, then we don't need it to time out unless
the connection breaks. The reason is that as long as the connection is
unbroken, the protocol states that the server is not allowed to drop the
request.  IOW: as long as the connection remains unbroken, the client may
assume that all transmitted RPC requests are being processed by the server,
and that retransmissions and timeouts of those requests are unwarranted.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
net/sunrpc/clnt.c

index 315f9c9cb72de4588f43271b6e6aaf6f15c2880a..43d6815f73917efa7ed12480fe9a96e19ec38b7d 100644 (file)
@@ -2318,6 +2318,15 @@ rpc_check_timeout(struct rpc_task *task)
        }
 
        if (RPC_IS_SOFT(task)) {
+               /*
+                * Once a "no retrans timeout" soft tasks (a.k.a NFSv4) has
+                * been sent, it should time out only if the transport
+                * connection gets terminally broken.
+                */
+               if ((task->tk_flags & RPC_TASK_NO_RETRANS_TIMEOUT) &&
+                   rpc_check_connected(task->tk_rqstp))
+                       return;
+
                if (clnt->cl_chatty) {
                        printk(KERN_NOTICE "%s: server %s not responding, timed out\n",
                                clnt->cl_program->name,