@@ -70,7 +70,6 @@ static void call_status(struct rpc_task *task);
70
70
static void call_transmit_status (struct rpc_task * task );
71
71
static void call_refresh (struct rpc_task * task );
72
72
static void call_refreshresult (struct rpc_task * task );
73
- static void call_timeout (struct rpc_task * task );
74
73
static void call_connect (struct rpc_task * task );
75
74
static void call_connect_status (struct rpc_task * task );
76
75
@@ -1908,7 +1907,8 @@ call_bind_status(struct rpc_task *task)
1908
1907
1909
1908
retry_timeout :
1910
1909
task -> tk_status = 0 ;
1911
- task -> tk_action = call_timeout ;
1910
+ task -> tk_action = call_encode ;
1911
+ rpc_check_timeout (task );
1912
1912
}
1913
1913
1914
1914
/*
@@ -2197,18 +2197,15 @@ call_status(struct rpc_task *task)
2197
2197
case - EHOSTUNREACH :
2198
2198
case - ENETUNREACH :
2199
2199
case - EPERM :
2200
- if (RPC_IS_SOFTCONN (task )) {
2201
- rpc_exit (task , status );
2202
- break ;
2203
- }
2200
+ if (RPC_IS_SOFTCONN (task ))
2201
+ goto out_exit ;
2204
2202
/*
2205
2203
* Delay any retries for 3 seconds, then handle as if it
2206
2204
* were a timeout.
2207
2205
*/
2208
2206
rpc_delay (task , 3 * HZ );
2209
2207
/* fall through */
2210
2208
case - ETIMEDOUT :
2211
- task -> tk_action = call_timeout ;
2212
2209
break ;
2213
2210
case - ECONNREFUSED :
2214
2211
case - ECONNRESET :
@@ -2221,18 +2218,21 @@ call_status(struct rpc_task *task)
2221
2218
case - EPIPE :
2222
2219
case - ENOTCONN :
2223
2220
case - EAGAIN :
2224
- task -> tk_action = call_timeout ;
2225
2221
break ;
2226
2222
case - EIO :
2227
2223
/* shutdown or soft timeout */
2228
- rpc_exit (task , status );
2229
- break ;
2224
+ goto out_exit ;
2230
2225
default :
2231
2226
if (clnt -> cl_chatty )
2232
2227
printk ("%s: RPC call returned error %d\n" ,
2233
2228
clnt -> cl_program -> name , - status );
2234
- rpc_exit ( task , status ) ;
2229
+ goto out_exit ;
2235
2230
}
2231
+ task -> tk_action = call_encode ;
2232
+ rpc_check_timeout (task );
2233
+ return ;
2234
+ out_exit :
2235
+ rpc_exit (task , status );
2236
2236
}
2237
2237
2238
2238
static void
@@ -2279,19 +2279,6 @@ rpc_check_timeout(struct rpc_task *task)
2279
2279
rpcauth_invalcred (task );
2280
2280
}
2281
2281
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
- {
2290
- task -> tk_action = call_encode ;
2291
- task -> tk_status = 0 ;
2292
- rpc_check_timeout (task );
2293
- }
2294
-
2295
2282
/*
2296
2283
* 7. Decode the RPC reply
2297
2284
*/
@@ -2329,16 +2316,8 @@ call_decode(struct rpc_task *task)
2329
2316
WARN_ON (memcmp (& req -> rq_rcv_buf , & req -> rq_private_buf ,
2330
2317
sizeof (req -> rq_rcv_buf )) != 0 );
2331
2318
2332
- if (req -> rq_rcv_buf .len < 12 ) {
2333
- if (!RPC_IS_SOFT (task )) {
2334
- task -> tk_action = call_encode ;
2335
- goto out_retry ;
2336
- }
2337
- dprintk ("RPC: %s: too small RPC reply size (%d bytes)\n" ,
2338
- clnt -> cl_program -> name , task -> tk_status );
2339
- task -> tk_action = call_timeout ;
2319
+ if (req -> rq_rcv_buf .len < 12 )
2340
2320
goto out_retry ;
2341
- }
2342
2321
2343
2322
xdr_init_decode (& xdr , & req -> rq_rcv_buf ,
2344
2323
req -> rq_rcv_buf .head [0 ].iov_base , req );
@@ -2361,6 +2340,8 @@ call_decode(struct rpc_task *task)
2361
2340
xprt_conditional_disconnect (req -> rq_xprt ,
2362
2341
req -> rq_connect_cookie );
2363
2342
}
2343
+ task -> tk_action = call_encode ;
2344
+ rpc_check_timeout (task );
2364
2345
}
2365
2346
}
2366
2347
0 commit comments