@@ -1811,6 +1811,24 @@ call_encode(struct rpc_task *task)
1811
1811
task -> tk_action = call_connect ;
1812
1812
}
1813
1813
1814
+ /*
1815
+ * Helpers to check if the task was already transmitted, and
1816
+ * to take action when that is the case.
1817
+ */
1818
+ static bool
1819
+ rpc_task_transmitted (struct rpc_task * task )
1820
+ {
1821
+ return !test_bit (RPC_TASK_NEED_XMIT , & task -> tk_runstate );
1822
+ }
1823
+
1824
+ static void
1825
+ rpc_task_handle_transmitted (struct rpc_task * task )
1826
+ {
1827
+ xprt_end_transmit (task );
1828
+ task -> tk_action = call_transmit_status ;
1829
+ call_transmit_status (task );
1830
+ }
1831
+
1814
1832
/*
1815
1833
* 4. Get the server port number if not yet set
1816
1834
*/
@@ -1819,6 +1837,11 @@ call_bind(struct rpc_task *task)
1819
1837
{
1820
1838
struct rpc_xprt * xprt = task -> tk_rqstp -> rq_xprt ;
1821
1839
1840
+ if (rpc_task_transmitted (task )) {
1841
+ rpc_task_handle_transmitted (task );
1842
+ return ;
1843
+ }
1844
+
1822
1845
dprint_status (task );
1823
1846
1824
1847
task -> tk_action = call_connect ;
@@ -1837,6 +1860,11 @@ call_bind_status(struct rpc_task *task)
1837
1860
{
1838
1861
int status = - EIO ;
1839
1862
1863
+ if (rpc_task_transmitted (task )) {
1864
+ rpc_task_handle_transmitted (task );
1865
+ return ;
1866
+ }
1867
+
1840
1868
if (task -> tk_status >= 0 ) {
1841
1869
dprint_status (task );
1842
1870
task -> tk_status = 0 ;
@@ -1916,6 +1944,11 @@ call_connect(struct rpc_task *task)
1916
1944
{
1917
1945
struct rpc_xprt * xprt = task -> tk_rqstp -> rq_xprt ;
1918
1946
1947
+ if (rpc_task_transmitted (task )) {
1948
+ rpc_task_handle_transmitted (task );
1949
+ return ;
1950
+ }
1951
+
1919
1952
dprintk ("RPC: %5u call_connect xprt %p %s connected\n" ,
1920
1953
task -> tk_pid , xprt ,
1921
1954
(xprt_connected (xprt ) ? "is" : "is not" ));
@@ -1942,10 +1975,8 @@ call_connect_status(struct rpc_task *task)
1942
1975
struct rpc_clnt * clnt = task -> tk_client ;
1943
1976
int status = task -> tk_status ;
1944
1977
1945
- /* Check if the task was already transmitted */
1946
- if (!test_bit (RPC_TASK_NEED_XMIT , & task -> tk_runstate )) {
1947
- xprt_end_transmit (task );
1948
- task -> tk_action = call_transmit_status ;
1978
+ if (rpc_task_transmitted (task )) {
1979
+ rpc_task_handle_transmitted (task );
1949
1980
return ;
1950
1981
}
1951
1982
@@ -2001,6 +2032,11 @@ call_connect_status(struct rpc_task *task)
2001
2032
static void
2002
2033
call_transmit (struct rpc_task * task )
2003
2034
{
2035
+ if (rpc_task_transmitted (task )) {
2036
+ rpc_task_handle_transmitted (task );
2037
+ return ;
2038
+ }
2039
+
2004
2040
dprint_status (task );
2005
2041
2006
2042
task -> tk_action = call_transmit_status ;
0 commit comments