Lines Matching full:task

53 static void	call_start(struct rpc_task *task);
54 static void call_reserve(struct rpc_task *task);
55 static void call_reserveresult(struct rpc_task *task);
56 static void call_allocate(struct rpc_task *task);
57 static void call_encode(struct rpc_task *task);
58 static void call_decode(struct rpc_task *task);
59 static void call_bind(struct rpc_task *task);
60 static void call_bind_status(struct rpc_task *task);
61 static void call_transmit(struct rpc_task *task);
62 static void call_status(struct rpc_task *task);
63 static void call_transmit_status(struct rpc_task *task);
64 static void call_refresh(struct rpc_task *task);
65 static void call_refreshresult(struct rpc_task *task);
66 static void call_connect(struct rpc_task *task);
67 static void call_connect_status(struct rpc_task *task);
69 static int rpc_encode_header(struct rpc_task *task,
71 static int rpc_decode_header(struct rpc_task *task,
75 static void rpc_check_timeout(struct rpc_task *task);
895 * @error: RPC task error value to set
907 struct rpc_task *task; in rpc_cancel_tasks() local
916 list_for_each_entry(task, &clnt->cl_tasks, tk_task) { in rpc_cancel_tasks()
917 if (!RPC_IS_ACTIVATED(task)) in rpc_cancel_tasks()
919 if (!fnmatch(task, data)) in rpc_cancel_tasks()
921 rpc_task_try_cancel(task, error); in rpc_cancel_tasks()
1114 void rpc_task_release_transport(struct rpc_task *task) in rpc_task_release_transport() argument
1116 struct rpc_xprt *xprt = task->tk_xprt; in rpc_task_release_transport()
1119 task->tk_xprt = NULL; in rpc_task_release_transport()
1120 if (task->tk_client) in rpc_task_release_transport()
1121 rpc_task_release_xprt(task->tk_client, xprt); in rpc_task_release_transport()
1128 void rpc_task_release_client(struct rpc_task *task) in rpc_task_release_client() argument
1130 struct rpc_clnt *clnt = task->tk_client; in rpc_task_release_client()
1132 rpc_task_release_transport(task); in rpc_task_release_client()
1134 /* Remove from client task list */ in rpc_task_release_client()
1136 list_del(&task->tk_task); in rpc_task_release_client()
1138 task->tk_client = NULL; in rpc_task_release_client()
1163 void rpc_task_set_transport(struct rpc_task *task, struct rpc_clnt *clnt) in rpc_task_set_transport() argument
1165 if (task->tk_xprt) { in rpc_task_set_transport()
1166 if (!(test_bit(XPRT_OFFLINE, &task->tk_xprt->state) && in rpc_task_set_transport()
1167 (task->tk_flags & RPC_TASK_MOVEABLE))) in rpc_task_set_transport()
1169 xprt_release(task); in rpc_task_set_transport()
1170 xprt_put(task->tk_xprt); in rpc_task_set_transport()
1172 if (task->tk_flags & RPC_TASK_NO_ROUND_ROBIN) in rpc_task_set_transport()
1173 task->tk_xprt = rpc_task_get_first_xprt(clnt); in rpc_task_set_transport()
1175 task->tk_xprt = rpc_task_get_next_xprt(clnt); in rpc_task_set_transport()
1179 void rpc_task_set_client(struct rpc_task *task, struct rpc_clnt *clnt) in rpc_task_set_client() argument
1181 rpc_task_set_transport(task, clnt); in rpc_task_set_client()
1182 task->tk_client = clnt; in rpc_task_set_client()
1185 task->tk_flags |= RPC_TASK_SOFT; in rpc_task_set_client()
1187 task->tk_flags |= RPC_TASK_TIMEOUT; in rpc_task_set_client()
1189 task->tk_flags |= RPC_TASK_NO_RETRANS_TIMEOUT; in rpc_task_set_client()
1191 task->tk_flags |= RPC_TASK_NETUNREACH_FATAL; in rpc_task_set_client()
1196 rpc_task_set_rpc_message(struct rpc_task *task, const struct rpc_message *msg) in rpc_task_set_rpc_message() argument
1199 task->tk_msg.rpc_proc = msg->rpc_proc; in rpc_task_set_rpc_message()
1200 task->tk_msg.rpc_argp = msg->rpc_argp; in rpc_task_set_rpc_message()
1201 task->tk_msg.rpc_resp = msg->rpc_resp; in rpc_task_set_rpc_message()
1202 task->tk_msg.rpc_cred = msg->rpc_cred; in rpc_task_set_rpc_message()
1203 if (!(task->tk_flags & RPC_TASK_CRED_NOREF)) in rpc_task_set_rpc_message()
1204 get_cred(task->tk_msg.rpc_cred); in rpc_task_set_rpc_message()
1212 rpc_default_callback(struct rpc_task *task, void *data) in rpc_default_callback() argument
1221 * rpc_run_task - Allocate a new RPC task, then run rpc_execute against it
1222 * @task_setup_data: pointer to task initialisation data
1226 struct rpc_task *task; in rpc_run_task() local
1228 task = rpc_new_task(task_setup_data); in rpc_run_task()
1229 if (IS_ERR(task)) in rpc_run_task()
1230 return task; in rpc_run_task()
1232 if (!RPC_IS_ASYNC(task)) in rpc_run_task()
1233 task->tk_flags |= RPC_TASK_CRED_NOREF; in rpc_run_task()
1235 rpc_task_set_client(task, task_setup_data->rpc_client); in rpc_run_task()
1236 rpc_task_set_rpc_message(task, task_setup_data->rpc_message); in rpc_run_task()
1238 if (task->tk_action == NULL) in rpc_run_task()
1239 rpc_call_start(task); in rpc_run_task()
1241 atomic_inc(&task->tk_count); in rpc_run_task()
1242 rpc_execute(task); in rpc_run_task()
1243 return task; in rpc_run_task()
1255 struct rpc_task *task; in rpc_call_sync() local
1271 task = rpc_run_task(&task_setup_data); in rpc_call_sync()
1272 if (IS_ERR(task)) in rpc_call_sync()
1273 return PTR_ERR(task); in rpc_call_sync()
1274 status = task->tk_status; in rpc_call_sync()
1275 rpc_put_task(task); in rpc_call_sync()
1292 struct rpc_task *task; in rpc_call_async() local
1301 task = rpc_run_task(&task_setup_data); in rpc_call_async()
1302 if (IS_ERR(task)) in rpc_call_async()
1303 return PTR_ERR(task); in rpc_call_async()
1304 rpc_put_task(task); in rpc_call_async()
1310 static void call_bc_encode(struct rpc_task *task);
1313 * rpc_run_bc_task - Allocate a new RPC task for backchannel use, then run
1316 * @timeout: timeout values to use for this task
1321 struct rpc_task *task; in rpc_run_bc_task() local
1332 task = rpc_new_task(&task_setup_data); in rpc_run_bc_task()
1333 if (IS_ERR(task)) { in rpc_run_bc_task()
1335 return task; in rpc_run_bc_task()
1338 xprt_init_bc_request(req, task, timeout); in rpc_run_bc_task()
1340 task->tk_action = call_bc_encode; in rpc_run_bc_task()
1341 atomic_inc(&task->tk_count); in rpc_run_bc_task()
1342 WARN_ON_ONCE(atomic_read(&task->tk_count) != 2); in rpc_run_bc_task()
1343 rpc_execute(task); in rpc_run_bc_task()
1345 dprintk("RPC: rpc_run_bc_task: task= %p\n", task); in rpc_run_bc_task()
1346 return task; in rpc_run_bc_task()
1371 rpc_call_start(struct rpc_task *task) in rpc_call_start() argument
1373 task->tk_action = call_start; in rpc_call_start()
1671 __rpc_restart_call(struct rpc_task *task, void (*action)(struct rpc_task *)) in __rpc_restart_call() argument
1673 task->tk_status = 0; in __rpc_restart_call()
1674 task->tk_rpc_status = 0; in __rpc_restart_call()
1675 task->tk_action = action; in __rpc_restart_call()
1684 rpc_restart_call(struct rpc_task *task) in rpc_restart_call() argument
1686 return __rpc_restart_call(task, call_start); in rpc_restart_call()
1695 rpc_restart_call_prepare(struct rpc_task *task) in rpc_restart_call_prepare() argument
1697 if (task->tk_ops->rpc_call_prepare != NULL) in rpc_restart_call_prepare()
1698 return __rpc_restart_call(task, rpc_prepare_task); in rpc_restart_call_prepare()
1699 return rpc_restart_call(task); in rpc_restart_call_prepare()
1704 *rpc_proc_name(const struct rpc_task *task) in rpc_proc_name() argument
1706 const struct rpc_procinfo *proc = task->tk_msg.rpc_proc; in rpc_proc_name()
1718 __rpc_call_rpcerror(struct rpc_task *task, int tk_status, int rpc_status) in __rpc_call_rpcerror() argument
1720 trace_rpc_call_rpcerror(task, tk_status, rpc_status); in __rpc_call_rpcerror()
1721 rpc_task_set_rpc_status(task, rpc_status); in __rpc_call_rpcerror()
1722 rpc_exit(task, tk_status); in __rpc_call_rpcerror()
1726 rpc_call_rpcerror(struct rpc_task *task, int status) in rpc_call_rpcerror() argument
1728 __rpc_call_rpcerror(task, status, status); in rpc_call_rpcerror()
1738 call_start(struct rpc_task *task) in call_start() argument
1740 struct rpc_clnt *clnt = task->tk_client; in call_start()
1741 int idx = task->tk_msg.rpc_proc->p_statidx; in call_start()
1743 trace_rpc_request(task); in call_start()
1745 if (task->tk_client->cl_shutdown) { in call_start()
1746 rpc_call_rpcerror(task, -EIO); in call_start()
1754 task->tk_action = call_reserve; in call_start()
1755 rpc_task_set_transport(task, clnt); in call_start()
1762 call_reserve(struct rpc_task *task) in call_reserve() argument
1764 task->tk_status = 0; in call_reserve()
1765 task->tk_action = call_reserveresult; in call_reserve()
1766 xprt_reserve(task); in call_reserve()
1769 static void call_retry_reserve(struct rpc_task *task);
1775 call_reserveresult(struct rpc_task *task) in call_reserveresult() argument
1777 int status = task->tk_status; in call_reserveresult()
1783 task->tk_status = 0; in call_reserveresult()
1785 if (task->tk_rqstp) { in call_reserveresult()
1786 task->tk_action = call_refresh; in call_reserveresult()
1789 spin_lock(&task->tk_client->cl_lock); in call_reserveresult()
1790 if (list_empty(&task->tk_task)) in call_reserveresult()
1791 list_add_tail(&task->tk_task, &task->tk_client->cl_tasks); in call_reserveresult()
1792 spin_unlock(&task->tk_client->cl_lock); in call_reserveresult()
1795 rpc_call_rpcerror(task, -EIO); in call_reserveresult()
1801 rpc_delay(task, HZ >> 2); in call_reserveresult()
1804 task->tk_action = call_retry_reserve; in call_reserveresult()
1807 rpc_call_rpcerror(task, status); in call_reserveresult()
1815 call_retry_reserve(struct rpc_task *task) in call_retry_reserve() argument
1817 task->tk_status = 0; in call_retry_reserve()
1818 task->tk_action = call_reserveresult; in call_retry_reserve()
1819 xprt_retry_reserve(task); in call_retry_reserve()
1826 call_refresh(struct rpc_task *task) in call_refresh() argument
1828 task->tk_action = call_refreshresult; in call_refresh()
1829 task->tk_status = 0; in call_refresh()
1830 task->tk_client->cl_stats->rpcauthrefresh++; in call_refresh()
1831 rpcauth_refreshcred(task); in call_refresh()
1838 call_refreshresult(struct rpc_task *task) in call_refreshresult() argument
1840 int status = task->tk_status; in call_refreshresult()
1842 task->tk_status = 0; in call_refreshresult()
1843 task->tk_action = call_refresh; in call_refreshresult()
1846 if (rpcauth_uptodatecred(task)) { in call_refreshresult()
1847 task->tk_action = call_allocate; in call_refreshresult()
1855 rpc_delay(task, 3*HZ); in call_refreshresult()
1859 if (!task->tk_cred_retry) in call_refreshresult()
1861 task->tk_cred_retry--; in call_refreshresult()
1862 trace_rpc_retry_refresh_status(task); in call_refreshresult()
1867 rpc_delay(task, HZ >> 4); in call_refreshresult()
1870 trace_rpc_refresh_status(task); in call_refreshresult()
1871 rpc_call_rpcerror(task, status); in call_refreshresult()
1879 call_allocate(struct rpc_task *task) in call_allocate() argument
1881 const struct rpc_auth *auth = task->tk_rqstp->rq_cred->cr_auth; in call_allocate()
1882 struct rpc_rqst *req = task->tk_rqstp; in call_allocate()
1884 const struct rpc_procinfo *proc = task->tk_msg.rpc_proc; in call_allocate()
1887 task->tk_status = 0; in call_allocate()
1888 task->tk_action = call_encode; in call_allocate()
1909 status = xprt->ops->buf_alloc(task); in call_allocate()
1910 trace_rpc_buf_alloc(task, status); in call_allocate()
1914 rpc_call_rpcerror(task, status); in call_allocate()
1918 if (RPC_IS_ASYNC(task) || !fatal_signal_pending(current)) { in call_allocate()
1919 task->tk_action = call_allocate; in call_allocate()
1920 rpc_delay(task, HZ>>4); in call_allocate()
1924 rpc_call_rpcerror(task, -ERESTARTSYS); in call_allocate()
1928 rpc_task_need_encode(struct rpc_task *task) in rpc_task_need_encode() argument
1930 return test_bit(RPC_TASK_NEED_XMIT, &task->tk_runstate) == 0 && in rpc_task_need_encode()
1931 (!(task->tk_flags & RPC_TASK_SENT) || in rpc_task_need_encode()
1932 !(task->tk_flags & RPC_TASK_NO_RETRANS_TIMEOUT) || in rpc_task_need_encode()
1933 xprt_request_need_retransmit(task)); in rpc_task_need_encode()
1937 rpc_xdr_encode(struct rpc_task *task) in rpc_xdr_encode() argument
1939 struct rpc_rqst *req = task->tk_rqstp; in rpc_xdr_encode()
1953 if (rpc_encode_header(task, &xdr)) in rpc_xdr_encode()
1956 task->tk_status = rpcauth_wrap_req(task, &xdr); in rpc_xdr_encode()
1963 call_encode(struct rpc_task *task) in call_encode() argument
1965 if (!rpc_task_need_encode(task)) in call_encode()
1968 /* Dequeue task from the receive queue while we're encoding */ in call_encode()
1969 xprt_request_dequeue_xprt(task); in call_encode()
1971 rpc_xdr_encode(task); in call_encode()
1972 /* Add task to reply queue before transmission to avoid races */ in call_encode()
1973 if (task->tk_status == 0 && rpc_reply_expected(task)) in call_encode()
1974 task->tk_status = xprt_request_enqueue_receive(task); in call_encode()
1976 if (task->tk_status != 0) { in call_encode()
1978 switch (task->tk_status) { in call_encode()
1981 rpc_delay(task, HZ >> 4); in call_encode()
1984 if (!task->tk_cred_retry) { in call_encode()
1985 rpc_call_rpcerror(task, task->tk_status); in call_encode()
1987 task->tk_action = call_refresh; in call_encode()
1988 task->tk_cred_retry--; in call_encode()
1989 trace_rpc_retry_refresh_status(task); in call_encode()
1993 rpc_call_rpcerror(task, task->tk_status); in call_encode()
1998 xprt_request_enqueue_transmit(task); in call_encode()
2000 task->tk_action = call_transmit; in call_encode()
2002 if (!xprt_bound(task->tk_xprt)) in call_encode()
2003 task->tk_action = call_bind; in call_encode()
2004 else if (!xprt_connected(task->tk_xprt)) in call_encode()
2005 task->tk_action = call_connect; in call_encode()
2009 * Helpers to check if the task was already transmitted, and
2013 rpc_task_transmitted(struct rpc_task *task) in rpc_task_transmitted() argument
2015 return !test_bit(RPC_TASK_NEED_XMIT, &task->tk_runstate); in rpc_task_transmitted()
2019 rpc_task_handle_transmitted(struct rpc_task *task) in rpc_task_handle_transmitted() argument
2021 xprt_end_transmit(task); in rpc_task_handle_transmitted()
2022 task->tk_action = call_transmit_status; in rpc_task_handle_transmitted()
2029 call_bind(struct rpc_task *task) in call_bind() argument
2031 struct rpc_xprt *xprt = task->tk_rqstp->rq_xprt; in call_bind()
2033 if (rpc_task_transmitted(task)) { in call_bind()
2034 rpc_task_handle_transmitted(task); in call_bind()
2039 task->tk_action = call_connect; in call_bind()
2043 task->tk_action = call_bind_status; in call_bind()
2044 if (!xprt_prepare_transmit(task)) in call_bind()
2047 xprt->ops->rpcbind(task); in call_bind()
2054 call_bind_status(struct rpc_task *task) in call_bind_status() argument
2056 struct rpc_xprt *xprt = task->tk_rqstp->rq_xprt; in call_bind_status()
2059 if (rpc_task_transmitted(task)) { in call_bind_status()
2060 rpc_task_handle_transmitted(task); in call_bind_status()
2064 if (task->tk_status >= 0) in call_bind_status()
2067 task->tk_status = 0; in call_bind_status()
2071 switch (task->tk_status) { in call_bind_status()
2073 rpc_delay(task, HZ >> 2); in call_bind_status()
2076 trace_rpcb_prog_unavail_err(task); in call_bind_status()
2078 if (task->tk_msg.rpc_proc->p_proc == 0) { in call_bind_status()
2082 rpc_delay(task, 3*HZ); in call_bind_status()
2085 rpc_delay(task, HZ >> 2); in call_bind_status()
2090 trace_rpcb_timeout_err(task); in call_bind_status()
2094 trace_rpcb_bind_version_err(task); in call_bind_status()
2097 trace_rpcb_bind_version_err(task); in call_bind_status()
2101 if (task->tk_flags & RPC_TASK_NETUNREACH_FATAL) in call_bind_status()
2111 trace_rpcb_unreachable_err(task); in call_bind_status()
2112 if (!RPC_IS_SOFTCONN(task)) { in call_bind_status()
2113 rpc_delay(task, 5*HZ); in call_bind_status()
2116 status = task->tk_status; in call_bind_status()
2119 trace_rpcb_unrecognized_err(task); in call_bind_status()
2122 rpc_call_rpcerror(task, status); in call_bind_status()
2125 task->tk_action = call_connect; in call_bind_status()
2128 task->tk_status = 0; in call_bind_status()
2129 task->tk_action = call_bind; in call_bind_status()
2130 rpc_check_timeout(task); in call_bind_status()
2137 call_connect(struct rpc_task *task) in call_connect() argument
2139 struct rpc_xprt *xprt = task->tk_rqstp->rq_xprt; in call_connect()
2141 if (rpc_task_transmitted(task)) { in call_connect()
2142 rpc_task_handle_transmitted(task); in call_connect()
2147 task->tk_action = call_transmit; in call_connect()
2151 task->tk_action = call_connect_status; in call_connect()
2152 if (task->tk_status < 0) in call_connect()
2154 if (task->tk_flags & RPC_TASK_NOCONNECT) { in call_connect()
2155 rpc_call_rpcerror(task, -ENOTCONN); in call_connect()
2158 if (!xprt_prepare_transmit(task)) in call_connect()
2160 xprt_connect(task); in call_connect()
2167 call_connect_status(struct rpc_task *task) in call_connect_status() argument
2169 struct rpc_xprt *xprt = task->tk_rqstp->rq_xprt; in call_connect_status()
2170 struct rpc_clnt *clnt = task->tk_client; in call_connect_status()
2171 int status = task->tk_status; in call_connect_status()
2173 if (rpc_task_transmitted(task)) { in call_connect_status()
2174 rpc_task_handle_transmitted(task); in call_connect_status()
2178 trace_rpc_connect_status(task); in call_connect_status()
2180 if (task->tk_status == 0) { in call_connect_status()
2185 task->tk_status = 0; in call_connect_status()
2189 task->tk_status = 0; in call_connect_status()
2193 if (task->tk_flags & RPC_TASK_NETUNREACH_FATAL) in call_connect_status()
2201 if (RPC_IS_SOFTCONN(task)) in call_connect_status()
2210 xprt_conditional_disconnect(task->tk_rqstp->rq_xprt, in call_connect_status()
2211 task->tk_rqstp->rq_connect_cookie); in call_connect_status()
2212 if (RPC_IS_SOFTCONN(task)) in call_connect_status()
2215 rpc_delay(task, 3*HZ); in call_connect_status()
2221 if (!(task->tk_flags & RPC_TASK_NO_ROUND_ROBIN) && in call_connect_status()
2222 (task->tk_flags & RPC_TASK_MOVEABLE) && in call_connect_status()
2224 struct rpc_xprt *saved = task->tk_xprt; in call_connect_status()
2231 xprt_release(task); in call_connect_status()
2237 task->tk_xprt = NULL; in call_connect_status()
2238 task->tk_action = call_start; in call_connect_status()
2241 if (!task->tk_xprt) in call_connect_status()
2246 rpc_delay(task, HZ >> 2); in call_connect_status()
2249 rpc_call_rpcerror(task, status); in call_connect_status()
2252 task->tk_action = call_transmit; in call_connect_status()
2256 task->tk_action = call_bind; in call_connect_status()
2258 rpc_check_timeout(task); in call_connect_status()
2265 call_transmit(struct rpc_task *task) in call_transmit() argument
2267 if (rpc_task_transmitted(task)) { in call_transmit()
2268 rpc_task_handle_transmitted(task); in call_transmit()
2272 task->tk_action = call_transmit_status; in call_transmit()
2273 if (!xprt_prepare_transmit(task)) in call_transmit()
2275 task->tk_status = 0; in call_transmit()
2276 if (test_bit(RPC_TASK_NEED_XMIT, &task->tk_runstate)) { in call_transmit()
2277 if (!xprt_connected(task->tk_xprt)) { in call_transmit()
2278 task->tk_status = -ENOTCONN; in call_transmit()
2281 xprt_transmit(task); in call_transmit()
2283 xprt_end_transmit(task); in call_transmit()
2290 call_transmit_status(struct rpc_task *task) in call_transmit_status() argument
2292 task->tk_action = call_status; in call_transmit_status()
2298 if (rpc_task_transmitted(task)) { in call_transmit_status()
2299 task->tk_status = 0; in call_transmit_status()
2300 xprt_request_wait_receive(task); in call_transmit_status()
2304 switch (task->tk_status) { in call_transmit_status()
2308 task->tk_status = 0; in call_transmit_status()
2309 task->tk_action = call_encode; in call_transmit_status()
2319 rpc_delay(task, HZ>>2); in call_transmit_status()
2323 task->tk_action = call_transmit; in call_transmit_status()
2324 task->tk_status = 0; in call_transmit_status()
2333 if (RPC_IS_SOFTCONN(task)) { in call_transmit_status()
2334 if (!task->tk_msg.rpc_proc->p_proc) in call_transmit_status()
2335 trace_xprt_ping(task->tk_xprt, in call_transmit_status()
2336 task->tk_status); in call_transmit_status()
2337 rpc_call_rpcerror(task, task->tk_status); in call_transmit_status()
2346 task->tk_action = call_bind; in call_transmit_status()
2347 task->tk_status = 0; in call_transmit_status()
2350 rpc_check_timeout(task); in call_transmit_status()
2354 static void call_bc_transmit(struct rpc_task *task);
2355 static void call_bc_transmit_status(struct rpc_task *task);
2358 call_bc_encode(struct rpc_task *task) in call_bc_encode() argument
2360 xprt_request_enqueue_transmit(task); in call_bc_encode()
2361 task->tk_action = call_bc_transmit; in call_bc_encode()
2369 call_bc_transmit(struct rpc_task *task) in call_bc_transmit() argument
2371 task->tk_action = call_bc_transmit_status; in call_bc_transmit()
2372 if (test_bit(RPC_TASK_NEED_XMIT, &task->tk_runstate)) { in call_bc_transmit()
2373 if (!xprt_prepare_transmit(task)) in call_bc_transmit()
2375 task->tk_status = 0; in call_bc_transmit()
2376 xprt_transmit(task); in call_bc_transmit()
2378 xprt_end_transmit(task); in call_bc_transmit()
2382 call_bc_transmit_status(struct rpc_task *task) in call_bc_transmit_status() argument
2384 struct rpc_rqst *req = task->tk_rqstp; in call_bc_transmit_status()
2386 if (rpc_task_transmitted(task)) in call_bc_transmit_status()
2387 task->tk_status = 0; in call_bc_transmit_status()
2389 switch (task->tk_status) { in call_bc_transmit_status()
2404 rpc_delay(task, HZ>>2); in call_bc_transmit_status()
2408 task->tk_status = 0; in call_bc_transmit_status()
2409 task->tk_action = call_bc_transmit; in call_bc_transmit_status()
2420 "error: %d\n", task->tk_status); in call_bc_transmit_status()
2430 "error: %d\n", task->tk_status); in call_bc_transmit_status()
2433 task->tk_action = rpc_exit_task; in call_bc_transmit_status()
2441 call_status(struct rpc_task *task) in call_status() argument
2443 struct rpc_clnt *clnt = task->tk_client; in call_status()
2446 if (!task->tk_msg.rpc_proc->p_proc) in call_status()
2447 trace_xprt_ping(task->tk_xprt, task->tk_status); in call_status()
2449 status = task->tk_status; in call_status()
2451 task->tk_action = call_decode; in call_status()
2455 trace_rpc_call_status(task); in call_status()
2456 task->tk_status = 0; in call_status()
2460 if (task->tk_flags & RPC_TASK_NETUNREACH_FATAL) in call_status()
2466 if (RPC_IS_SOFTCONN(task)) in call_status()
2472 rpc_delay(task, 3*HZ); in call_status()
2483 rpc_delay(task, 3*HZ); in call_status()
2491 rpc_delay(task, HZ>>2); in call_status()
2502 task->tk_action = call_encode; in call_status()
2503 rpc_check_timeout(task); in call_status()
2506 rpc_call_rpcerror(task, status); in call_status()
2519 rpc_check_timeout(struct rpc_task *task) in rpc_check_timeout() argument
2521 struct rpc_clnt *clnt = task->tk_client; in rpc_check_timeout()
2523 if (RPC_SIGNALLED(task)) in rpc_check_timeout()
2526 if (xprt_adjust_timeout(task->tk_rqstp) == 0) in rpc_check_timeout()
2529 trace_rpc_timeout_status(task); in rpc_check_timeout()
2530 task->tk_timeouts++; in rpc_check_timeout()
2532 if (RPC_IS_SOFTCONN(task) && !rpc_check_connected(task->tk_rqstp)) { in rpc_check_timeout()
2533 rpc_call_rpcerror(task, -ETIMEDOUT); in rpc_check_timeout()
2537 if (RPC_IS_SOFT(task)) { in rpc_check_timeout()
2543 if ((task->tk_flags & RPC_TASK_NO_RETRANS_TIMEOUT) && in rpc_check_timeout()
2544 rpc_check_connected(task->tk_rqstp)) in rpc_check_timeout()
2551 task->tk_xprt->servername); in rpc_check_timeout()
2553 if (task->tk_flags & RPC_TASK_TIMEOUT) in rpc_check_timeout()
2554 rpc_call_rpcerror(task, -ETIMEDOUT); in rpc_check_timeout()
2556 __rpc_call_rpcerror(task, -EIO, -ETIMEDOUT); in rpc_check_timeout()
2560 if (!(task->tk_flags & RPC_CALL_MAJORSEEN)) { in rpc_check_timeout()
2561 task->tk_flags |= RPC_CALL_MAJORSEEN; in rpc_check_timeout()
2566 task->tk_xprt->servername); in rpc_check_timeout()
2574 rpcauth_invalcred(task); in rpc_check_timeout()
2581 call_decode(struct rpc_task *task) in call_decode() argument
2583 struct rpc_clnt *clnt = task->tk_client; in call_decode()
2584 struct rpc_rqst *req = task->tk_rqstp; in call_decode()
2588 if (!task->tk_msg.rpc_proc->p_decode) { in call_decode()
2589 task->tk_action = rpc_exit_task; in call_decode()
2593 if (task->tk_flags & RPC_CALL_MAJORSEEN) { in call_decode()
2597 task->tk_xprt->servername); in call_decode()
2599 task->tk_flags &= ~RPC_CALL_MAJORSEEN; in call_decode()
2616 trace_rpc_xdr_recvfrom(task, &req->rq_rcv_buf); in call_decode()
2624 err = rpc_decode_header(task, &xdr); in call_decode()
2628 task->tk_action = rpc_exit_task; in call_decode()
2629 task->tk_status = rpcauth_unwrap_resp(task, &xdr); in call_decode()
2633 task->tk_status = 0; in call_decode()
2634 if (task->tk_client->cl_discrtry) in call_decode()
2637 task->tk_action = call_encode; in call_decode()
2638 rpc_check_timeout(task); in call_decode()
2641 task->tk_action = call_reserve; in call_decode()
2642 rpc_check_timeout(task); in call_decode()
2643 rpcauth_invalcred(task); in call_decode()
2645 xprt_release(task); in call_decode()
2650 rpc_encode_header(struct rpc_task *task, struct xdr_stream *xdr) in rpc_encode_header() argument
2652 struct rpc_clnt *clnt = task->tk_client; in rpc_encode_header()
2653 struct rpc_rqst *req = task->tk_rqstp; in rpc_encode_header()
2666 *p = cpu_to_be32(task->tk_msg.rpc_proc->p_proc); in rpc_encode_header()
2668 error = rpcauth_marshcred(task, xdr); in rpc_encode_header()
2673 trace_rpc_bad_callhdr(task); in rpc_encode_header()
2674 rpc_call_rpcerror(task, error); in rpc_encode_header()
2679 rpc_decode_header(struct rpc_task *task, struct xdr_stream *xdr) in rpc_decode_header() argument
2681 struct rpc_clnt *clnt = task->tk_client; in rpc_decode_header()
2690 if (task->tk_rqstp->rq_rcv_buf.len & 3) in rpc_decode_header()
2702 error = rpcauth_checkverf(task, xdr); in rpc_decode_header()
2704 struct rpc_cred *cred = task->tk_rqstp->rq_cred; in rpc_decode_header()
2707 rpcauth_invalcred(task); in rpc_decode_header()
2708 if (!task->tk_cred_retry) in rpc_decode_header()
2710 task->tk_cred_retry--; in rpc_decode_header()
2711 trace_rpc__stale_creds(task); in rpc_decode_header()
2724 trace_rpc__prog_unavail(task); in rpc_decode_header()
2728 trace_rpc__prog_mismatch(task); in rpc_decode_header()
2732 trace_rpc__proc_unavail(task); in rpc_decode_header()
2737 trace_rpc__garbage_args(task); in rpc_decode_header()
2746 if (task->tk_garb_retry) { in rpc_decode_header()
2747 task->tk_garb_retry--; in rpc_decode_header()
2748 task->tk_action = call_encode; in rpc_decode_header()
2752 rpc_call_rpcerror(task, error); in rpc_decode_header()
2756 trace_rpc__unparsable(task); in rpc_decode_header()
2761 trace_rpc_bad_verifier(task); in rpc_decode_header()
2769 task->tk_rqstp->rq_reply_bytes_recvd = 0; in rpc_decode_header()
2770 task->tk_status = xprt_request_enqueue_receive(task); in rpc_decode_header()
2771 task->tk_action = call_transmit_status; in rpc_decode_header()
2786 trace_rpc__mismatch(task); in rpc_decode_header()
2801 rpcauth_invalcred(task); in rpc_decode_header()
2802 if (!task->tk_cred_retry) in rpc_decode_header()
2804 task->tk_cred_retry--; in rpc_decode_header()
2805 trace_rpc__stale_creds(task); in rpc_decode_header()
2810 if (!task->tk_garb_retry) in rpc_decode_header()
2812 task->tk_garb_retry--; in rpc_decode_header()
2813 trace_rpc__bad_creds(task); in rpc_decode_header()
2814 task->tk_action = call_encode; in rpc_decode_header()
2817 trace_rpc__auth_tooweak(task); in rpc_decode_header()
2819 task->tk_xprt->servername); in rpc_decode_header()
2848 rpc_null_call_prepare(struct rpc_task *task, void *data) in rpc_null_call_prepare() argument
2850 task->tk_flags &= ~RPC_TASK_NO_RETRANS_TIMEOUT; in rpc_null_call_prepare()
2851 rpc_call_start(task); in rpc_null_call_prepare()
2889 struct rpc_task *task; in rpc_ping() local
2895 task = rpc_call_null_helper(clnt, NULL, NULL, 0, NULL, NULL); in rpc_ping()
2896 if (IS_ERR(task)) in rpc_ping()
2897 return PTR_ERR(task); in rpc_ping()
2898 status = task->tk_status; in rpc_ping()
2899 rpc_put_task(task); in rpc_ping()
2914 struct rpc_task *task; in rpc_ping_noreply() local
2917 task = rpc_run_task(&task_setup_data); in rpc_ping_noreply()
2918 if (IS_ERR(task)) in rpc_ping_noreply()
2919 return PTR_ERR(task); in rpc_ping_noreply()
2920 status = task->tk_status; in rpc_ping_noreply()
2921 rpc_put_task(task); in rpc_ping_noreply()
2930 static void rpc_cb_add_xprt_done(struct rpc_task *task, void *calldata) in rpc_cb_add_xprt_done() argument
2934 if (task->tk_status == 0) in rpc_cb_add_xprt_done()
2965 struct rpc_task *task; in rpc_clnt_test_and_add_xprt() local
2989 task = rpc_call_null_helper(clnt, xprt, NULL, RPC_TASK_ASYNC, in rpc_clnt_test_and_add_xprt()
2991 if (IS_ERR(task)) in rpc_clnt_test_and_add_xprt()
2992 return PTR_ERR(task); in rpc_clnt_test_and_add_xprt()
2995 rpc_put_task(task); in rpc_clnt_test_and_add_xprt()
3005 struct rpc_task *task; in rpc_clnt_add_xprt_helper() local
3009 task = rpc_call_null_helper(clnt, xprt, NULL, 0, NULL, NULL); in rpc_clnt_add_xprt_helper()
3010 if (IS_ERR(task)) in rpc_clnt_add_xprt_helper()
3011 return PTR_ERR(task); in rpc_clnt_add_xprt_helper()
3013 status = task->tk_status; in rpc_clnt_add_xprt_helper()
3014 rpc_put_task(task); in rpc_clnt_add_xprt_helper()
3348 const struct rpc_task *task) in rpc_show_task() argument
3352 if (RPC_IS_QUEUED(task)) in rpc_show_task()
3353 rpc_waitq = rpc_qname(task->tk_waitqueue); in rpc_show_task()
3356 task->tk_pid, task->tk_flags, task->tk_status, in rpc_show_task()
3357 clnt, task->tk_rqstp, rpc_task_timeout(task), task->tk_ops, in rpc_show_task()
3358 clnt->cl_program->name, clnt->cl_vers, rpc_proc_name(task), in rpc_show_task()
3359 task->tk_action, rpc_waitq); in rpc_show_task()
3365 struct rpc_task *task; in rpc_show_tasks() local
3372 list_for_each_entry(task, &clnt->cl_tasks, tk_task) { in rpc_show_tasks()
3377 rpc_show_task(clnt, task); in rpc_show_tasks()