@@ -1540,7 +1540,6 @@ call_start(struct rpc_task *task)
15401540 clnt -> cl_stats -> rpccnt ++ ;
15411541 task -> tk_action = call_reserve ;
15421542 rpc_task_set_transport (task , clnt );
1543- call_reserve (task );
15441543}
15451544
15461545/*
@@ -1554,9 +1553,6 @@ call_reserve(struct rpc_task *task)
15541553 task -> tk_status = 0 ;
15551554 task -> tk_action = call_reserveresult ;
15561555 xprt_reserve (task );
1557- if (rpc_task_need_resched (task ))
1558- return ;
1559- call_reserveresult (task );
15601556}
15611557
15621558static void call_retry_reserve (struct rpc_task * task );
@@ -1579,7 +1575,6 @@ call_reserveresult(struct rpc_task *task)
15791575 if (status >= 0 ) {
15801576 if (task -> tk_rqstp ) {
15811577 task -> tk_action = call_refresh ;
1582- call_refresh (task );
15831578 return ;
15841579 }
15851580
@@ -1605,7 +1600,6 @@ call_reserveresult(struct rpc_task *task)
16051600 /* fall through */
16061601 case - EAGAIN : /* woken up; retry */
16071602 task -> tk_action = call_retry_reserve ;
1608- call_retry_reserve (task );
16091603 return ;
16101604 case - EIO : /* probably a shutdown */
16111605 break ;
@@ -1628,9 +1622,6 @@ call_retry_reserve(struct rpc_task *task)
16281622 task -> tk_status = 0 ;
16291623 task -> tk_action = call_reserveresult ;
16301624 xprt_retry_reserve (task );
1631- if (rpc_task_need_resched (task ))
1632- return ;
1633- call_reserveresult (task );
16341625}
16351626
16361627/*
@@ -1645,9 +1636,6 @@ call_refresh(struct rpc_task *task)
16451636 task -> tk_status = 0 ;
16461637 task -> tk_client -> cl_stats -> rpcauthrefresh ++ ;
16471638 rpcauth_refreshcred (task );
1648- if (rpc_task_need_resched (task ))
1649- return ;
1650- call_refreshresult (task );
16511639}
16521640
16531641/*
@@ -1666,7 +1654,6 @@ call_refreshresult(struct rpc_task *task)
16661654 case 0 :
16671655 if (rpcauth_uptodatecred (task )) {
16681656 task -> tk_action = call_allocate ;
1669- call_allocate (task );
16701657 return ;
16711658 }
16721659 /* Use rate-limiting and a max number of retries if refresh
@@ -1685,7 +1672,6 @@ call_refreshresult(struct rpc_task *task)
16851672 task -> tk_cred_retry -- ;
16861673 dprintk ("RPC: %5u %s: retry refresh creds\n" ,
16871674 task -> tk_pid , __func__ );
1688- call_refresh (task );
16891675 return ;
16901676 }
16911677 dprintk ("RPC: %5u %s: refresh creds failed with error %d\n" ,
@@ -1711,10 +1697,8 @@ call_allocate(struct rpc_task *task)
17111697 task -> tk_status = 0 ;
17121698 task -> tk_action = call_encode ;
17131699
1714- if (req -> rq_buffer ) {
1715- call_encode (task );
1700+ if (req -> rq_buffer )
17161701 return ;
1717- }
17181702
17191703 if (proc -> p_proc != 0 ) {
17201704 BUG_ON (proc -> p_arglen == 0 );
@@ -1740,12 +1724,8 @@ call_allocate(struct rpc_task *task)
17401724
17411725 status = xprt -> ops -> buf_alloc (task );
17421726 xprt_inject_disconnect (xprt );
1743- if (status == 0 ) {
1744- if (rpc_task_need_resched (task ))
1745- return ;
1746- call_encode (task );
1727+ if (status == 0 )
17471728 return ;
1748- }
17491729 if (status != - ENOMEM ) {
17501730 rpc_exit (task , status );
17511731 return ;
@@ -1828,8 +1808,12 @@ call_encode(struct rpc_task *task)
18281808 xprt_request_enqueue_receive (task );
18291809 xprt_request_enqueue_transmit (task );
18301810out :
1831- task -> tk_action = call_bind ;
1832- call_bind (task );
1811+ task -> tk_action = call_transmit ;
1812+ /* Check that the connection is OK */
1813+ if (!xprt_bound (task -> tk_xprt ))
1814+ task -> tk_action = call_bind ;
1815+ else if (!xprt_connected (task -> tk_xprt ))
1816+ task -> tk_action = call_connect ;
18331817}
18341818
18351819/*
@@ -1847,7 +1831,6 @@ rpc_task_handle_transmitted(struct rpc_task *task)
18471831{
18481832 xprt_end_transmit (task );
18491833 task -> tk_action = call_transmit_status ;
1850- call_transmit_status (task );
18511834}
18521835
18531836/*
@@ -1865,7 +1848,6 @@ call_bind(struct rpc_task *task)
18651848
18661849 if (xprt_bound (xprt )) {
18671850 task -> tk_action = call_connect ;
1868- call_connect (task );
18691851 return ;
18701852 }
18711853
@@ -1896,7 +1878,6 @@ call_bind_status(struct rpc_task *task)
18961878 dprint_status (task );
18971879 task -> tk_status = 0 ;
18981880 task -> tk_action = call_connect ;
1899- call_connect (task );
19001881 return ;
19011882 }
19021883
@@ -1981,7 +1962,6 @@ call_connect(struct rpc_task *task)
19811962
19821963 if (xprt_connected (xprt )) {
19831964 task -> tk_action = call_transmit ;
1984- call_transmit (task );
19851965 return ;
19861966 }
19871967
@@ -2051,7 +2031,6 @@ call_connect_status(struct rpc_task *task)
20512031 case 0 :
20522032 clnt -> cl_stats -> netreconn ++ ;
20532033 task -> tk_action = call_transmit ;
2054- call_transmit (task );
20552034 return ;
20562035 }
20572036 rpc_exit (task , status );
@@ -2087,9 +2066,6 @@ call_transmit(struct rpc_task *task)
20872066 xprt_transmit (task );
20882067 }
20892068 xprt_end_transmit (task );
2090- if (rpc_task_need_resched (task ))
2091- return ;
2092- call_transmit_status (task );
20932069}
20942070
20952071/*
@@ -2107,9 +2083,6 @@ call_transmit_status(struct rpc_task *task)
21072083 if (rpc_task_transmitted (task )) {
21082084 if (task -> tk_status == 0 )
21092085 xprt_request_wait_receive (task );
2110- if (rpc_task_need_resched (task ))
2111- return ;
2112- call_status (task );
21132086 return ;
21142087 }
21152088
@@ -2170,7 +2143,6 @@ call_bc_encode(struct rpc_task *task)
21702143{
21712144 xprt_request_enqueue_transmit (task );
21722145 task -> tk_action = call_bc_transmit ;
2173- call_bc_transmit (task );
21742146}
21752147
21762148/*
@@ -2261,7 +2233,6 @@ call_status(struct rpc_task *task)
22612233 status = task -> tk_status ;
22622234 if (status >= 0 ) {
22632235 task -> tk_action = call_decode ;
2264- call_decode (task );
22652236 return ;
22662237 }
22672238
0 commit comments