diff options
author | Olga Kornievskaia <olga.kornievskaia@gmail.com> | 2020-06-23 11:24:09 -0400 |
---|---|---|
committer | Anna Schumaker <Anna.Schumaker@Netapp.com> | 2020-09-21 10:21:08 -0400 |
commit | 88428cc4ae7abcc879295fbb19373dd76aad2bdd (patch) | |
tree | f7c8d89aefba564eb2532920480e7bab0be0b6fa /net/sunrpc/clnt.c | |
parent | 82c596ebaa104f994d25256523ae2f9047323fe7 (diff) | |
download | linux-rpi-88428cc4ae7abcc879295fbb19373dd76aad2bdd.tar.gz linux-rpi-88428cc4ae7abcc879295fbb19373dd76aad2bdd.tar.bz2 linux-rpi-88428cc4ae7abcc879295fbb19373dd76aad2bdd.zip |
SUNRPC dont update timeout value on connection reset
Current behaviour: every time a v3 operation is re-sent to the server
we update (double) the timeout. There is no distinction between whether
or not the previous timer had expired before the re-sent happened.
Here's the scenario:
1. Client sends a v3 operation
2. Server RST-s the connection (prior to the timeout) (eg., connection
is immediately reset)
3. Client re-sends a v3 operation but the timeout is now 120sec.
As a result, an application sees 2mins pause before a retry in case
server again does not reply. Where as if a connection reset didn't
change the timeout value, the client would have re-tried (the 3rd
time) after 60secs.
Signed-off-by: Olga Kornievskaia <kolga@netapp.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
Diffstat (limited to 'net/sunrpc/clnt.c')
-rw-r--r-- | net/sunrpc/clnt.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c index 62e0b6c1e8cf..35bbd9c16e87 100644 --- a/net/sunrpc/clnt.c +++ b/net/sunrpc/clnt.c @@ -2405,7 +2405,8 @@ call_status(struct rpc_task *task) goto out_exit; } task->tk_action = call_encode; - rpc_check_timeout(task); + if (status != -ECONNRESET && status != -ECONNABORTED) + rpc_check_timeout(task); return; out_exit: rpc_call_rpcerror(task, status); |