@@ -79,6 +79,7 @@ static int rpc_encode_header(struct rpc_task *task,
79
79
static int rpc_decode_header (struct rpc_task * task ,
80
80
struct xdr_stream * xdr );
81
81
static int rpc_ping (struct rpc_clnt * clnt );
82
+ static void rpc_check_timeout (struct rpc_task * task );
82
83
83
84
static void rpc_register_client (struct rpc_clnt * clnt )
84
85
{
@@ -1962,8 +1963,7 @@ call_connect_status(struct rpc_task *task)
1962
1963
break ;
1963
1964
if (clnt -> cl_autobind ) {
1964
1965
rpc_force_rebind (clnt );
1965
- task -> tk_action = call_bind ;
1966
- return ;
1966
+ goto out_retry ;
1967
1967
}
1968
1968
/* fall through */
1969
1969
case - ECONNRESET :
@@ -1983,16 +1983,19 @@ call_connect_status(struct rpc_task *task)
1983
1983
/* fall through */
1984
1984
case - ENOTCONN :
1985
1985
case - EAGAIN :
1986
- /* Check for timeouts before looping back to call_bind */
1987
1986
case - ETIMEDOUT :
1988
- task -> tk_action = call_timeout ;
1989
- return ;
1987
+ goto out_retry ;
1990
1988
case 0 :
1991
1989
clnt -> cl_stats -> netreconn ++ ;
1992
1990
task -> tk_action = call_transmit ;
1993
1991
return ;
1994
1992
}
1995
1993
rpc_exit (task , status );
1994
+ return ;
1995
+ out_retry :
1996
+ /* Check for timeouts before looping back to call_bind */
1997
+ task -> tk_action = call_bind ;
1998
+ rpc_check_timeout (task );
1996
1999
}
1997
2000
1998
2001
/*
@@ -2069,7 +2072,7 @@ call_transmit_status(struct rpc_task *task)
2069
2072
trace_xprt_ping (task -> tk_xprt ,
2070
2073
task -> tk_status );
2071
2074
rpc_exit (task , task -> tk_status );
2072
- break ;
2075
+ return ;
2073
2076
}
2074
2077
/* fall through */
2075
2078
case - ECONNRESET :
@@ -2081,6 +2084,7 @@ call_transmit_status(struct rpc_task *task)
2081
2084
task -> tk_status = 0 ;
2082
2085
break ;
2083
2086
}
2087
+ rpc_check_timeout (task );
2084
2088
}
2085
2089
2086
2090
#if defined(CONFIG_SUNRPC_BACKCHANNEL )
@@ -2217,7 +2221,7 @@ call_status(struct rpc_task *task)
2217
2221
case - EPIPE :
2218
2222
case - ENOTCONN :
2219
2223
case - EAGAIN :
2220
- task -> tk_action = call_encode ;
2224
+ task -> tk_action = call_timeout ;
2221
2225
break ;
2222
2226
case - EIO :
2223
2227
/* shutdown or soft timeout */
@@ -2231,20 +2235,13 @@ call_status(struct rpc_task *task)
2231
2235
}
2232
2236
}
2233
2237
2234
- /*
2235
- * 6a. Handle RPC timeout
2236
- * We do not release the request slot, so we keep using the
2237
- * same XID for all retransmits.
2238
- */
2239
2238
static void
2240
- call_timeout (struct rpc_task * task )
2239
+ rpc_check_timeout (struct rpc_task * task )
2241
2240
{
2242
2241
struct rpc_clnt * clnt = task -> tk_client ;
2243
2242
2244
- if (xprt_adjust_timeout (task -> tk_rqstp ) == 0 ) {
2245
- dprintk ("RPC: %5u call_timeout (minor)\n" , task -> tk_pid );
2246
- goto retry ;
2247
- }
2243
+ if (xprt_adjust_timeout (task -> tk_rqstp ) == 0 )
2244
+ return ;
2248
2245
2249
2246
dprintk ("RPC: %5u call_timeout (major)\n" , task -> tk_pid );
2250
2247
task -> tk_timeouts ++ ;
@@ -2280,10 +2277,19 @@ call_timeout(struct rpc_task *task)
2280
2277
* event? RFC2203 requires the server to drop all such requests.
2281
2278
*/
2282
2279
rpcauth_invalcred (task );
2280
+ }
2283
2281
2284
- retry :
2282
+ /*
2283
+ * 6a. Handle RPC timeout
2284
+ * We do not release the request slot, so we keep using the
2285
+ * same XID for all retransmits.
2286
+ */
2287
+ static void
2288
+ call_timeout (struct rpc_task * task )
2289
+ {
2285
2290
task -> tk_action = call_encode ;
2286
2291
task -> tk_status = 0 ;
2292
+ rpc_check_timeout (task );
2287
2293
}
2288
2294
2289
2295
/*
0 commit comments