Lines Matching refs:task

70 static void	xprt_connect_status(struct rpc_task *task);
183 int xprt_reserve_xprt(struct rpc_xprt *xprt, struct rpc_task *task) in xprt_reserve_xprt() argument
185 struct rpc_rqst *req = task->tk_rqstp; in xprt_reserve_xprt()
189 if (task == xprt->snd_task) in xprt_reserve_xprt()
193 xprt->snd_task = task; in xprt_reserve_xprt()
201 task->tk_pid, xprt); in xprt_reserve_xprt()
202 task->tk_timeout = 0; in xprt_reserve_xprt()
203 task->tk_status = -EAGAIN; in xprt_reserve_xprt()
210 rpc_sleep_on_priority(&xprt->sending, task, NULL, priority); in xprt_reserve_xprt()
234 int xprt_reserve_xprt_cong(struct rpc_xprt *xprt, struct rpc_task *task) in xprt_reserve_xprt_cong() argument
236 struct rpc_rqst *req = task->tk_rqstp; in xprt_reserve_xprt_cong()
240 if (task == xprt->snd_task) in xprt_reserve_xprt_cong()
245 xprt->snd_task = task; in xprt_reserve_xprt_cong()
248 if (__xprt_get_cong(xprt, task)) { in xprt_reserve_xprt_cong()
249 xprt->snd_task = task; in xprt_reserve_xprt_cong()
257 dprintk("RPC: %5u failed to lock transport %p\n", task->tk_pid, xprt); in xprt_reserve_xprt_cong()
258 task->tk_timeout = 0; in xprt_reserve_xprt_cong()
259 task->tk_status = -EAGAIN; in xprt_reserve_xprt_cong()
266 rpc_sleep_on_priority(&xprt->sending, task, NULL, priority); in xprt_reserve_xprt_cong()
271 static inline int xprt_lock_write(struct rpc_xprt *xprt, struct rpc_task *task) in xprt_lock_write() argument
276 retval = xprt->ops->reserve_xprt(xprt, task); in xprt_lock_write()
281 static bool __xprt_lock_write_func(struct rpc_task *task, void *data) in __xprt_lock_write_func() argument
286 req = task->tk_rqstp; in __xprt_lock_write_func()
287 xprt->snd_task = task; in __xprt_lock_write_func()
304 static bool __xprt_lock_write_cong_func(struct rpc_task *task, void *data) in __xprt_lock_write_cong_func() argument
309 req = task->tk_rqstp; in __xprt_lock_write_cong_func()
311 xprt->snd_task = task; in __xprt_lock_write_cong_func()
314 if (__xprt_get_cong(xprt, task)) { in __xprt_lock_write_cong_func()
315 xprt->snd_task = task; in __xprt_lock_write_cong_func()
335 static void xprt_task_clear_bytes_sent(struct rpc_task *task) in xprt_task_clear_bytes_sent() argument
337 if (task != NULL) { in xprt_task_clear_bytes_sent()
338 struct rpc_rqst *req = task->tk_rqstp; in xprt_task_clear_bytes_sent()
351 void xprt_release_xprt(struct rpc_xprt *xprt, struct rpc_task *task) in xprt_release_xprt() argument
353 if (xprt->snd_task == task) { in xprt_release_xprt()
354 xprt_task_clear_bytes_sent(task); in xprt_release_xprt()
369 void xprt_release_xprt_cong(struct rpc_xprt *xprt, struct rpc_task *task) in xprt_release_xprt_cong() argument
371 if (xprt->snd_task == task) { in xprt_release_xprt_cong()
372 xprt_task_clear_bytes_sent(task); in xprt_release_xprt_cong()
379 static inline void xprt_release_write(struct rpc_xprt *xprt, struct rpc_task *task) in xprt_release_write() argument
382 xprt->ops->release_xprt(xprt, task); in xprt_release_write()
391 __xprt_get_cong(struct rpc_xprt *xprt, struct rpc_task *task) in __xprt_get_cong() argument
393 struct rpc_rqst *req = task->tk_rqstp; in __xprt_get_cong()
398 task->tk_pid, xprt->cong, xprt->cwnd); in __xprt_get_cong()
426 void xprt_release_rqst_cong(struct rpc_task *task) in xprt_release_rqst_cong() argument
428 struct rpc_rqst *req = task->tk_rqstp; in xprt_release_rqst_cong()
450 void xprt_adjust_cwnd(struct rpc_xprt *xprt, struct rpc_task *task, int result) in xprt_adjust_cwnd() argument
452 struct rpc_rqst *req = task->tk_rqstp; in xprt_adjust_cwnd()
498 void xprt_wait_for_buffer_space(struct rpc_task *task, rpc_action action) in xprt_wait_for_buffer_space() argument
500 struct rpc_rqst *req = task->tk_rqstp; in xprt_wait_for_buffer_space()
503 task->tk_timeout = RPC_IS_SOFT(task) ? req->rq_timeout : 0; in xprt_wait_for_buffer_space()
504 rpc_sleep_on(&xprt->pending, task, action); in xprt_wait_for_buffer_space()
535 void xprt_set_retrans_timeout_def(struct rpc_task *task) in xprt_set_retrans_timeout_def() argument
537 task->tk_timeout = task->tk_rqstp->rq_timeout; in xprt_set_retrans_timeout_def()
547 void xprt_set_retrans_timeout_rtt(struct rpc_task *task) in xprt_set_retrans_timeout_rtt() argument
549 int timer = task->tk_msg.rpc_proc->p_timer; in xprt_set_retrans_timeout_rtt()
550 struct rpc_clnt *clnt = task->tk_client; in xprt_set_retrans_timeout_rtt()
552 struct rpc_rqst *req = task->tk_rqstp; in xprt_set_retrans_timeout_rtt()
555 task->tk_timeout = rpc_calc_rto(rtt, timer); in xprt_set_retrans_timeout_rtt()
556 task->tk_timeout <<= rpc_ntimeo(rtt, timer) + req->rq_retries; in xprt_set_retrans_timeout_rtt()
557 if (task->tk_timeout > max_timeout || task->tk_timeout == 0) in xprt_set_retrans_timeout_rtt()
558 task->tk_timeout = max_timeout; in xprt_set_retrans_timeout_rtt()
719 struct rpc_task *task, in xprt_lock_connect() argument
727 if (xprt->snd_task != task) in xprt_lock_connect()
729 xprt_task_clear_bytes_sent(task); in xprt_lock_connect()
757 void xprt_connect(struct rpc_task *task) in xprt_connect() argument
759 struct rpc_xprt *xprt = task->tk_rqstp->rq_xprt; in xprt_connect()
761 dprintk("RPC: %5u xprt_connect xprt %p %s connected\n", task->tk_pid, in xprt_connect()
765 task->tk_status = -EAGAIN; in xprt_connect()
768 if (!xprt_lock_write(xprt, task)) in xprt_connect()
775 task->tk_rqstp->rq_bytes_sent = 0; in xprt_connect()
776 task->tk_timeout = task->tk_rqstp->rq_timeout; in xprt_connect()
777 task->tk_rqstp->rq_connect_cookie = xprt->connect_cookie; in xprt_connect()
778 rpc_sleep_on(&xprt->pending, task, xprt_connect_status); in xprt_connect()
785 xprt->ops->connect(xprt, task); in xprt_connect()
787 xprt_release_write(xprt, task); in xprt_connect()
790 static void xprt_connect_status(struct rpc_task *task) in xprt_connect_status() argument
792 struct rpc_xprt *xprt = task->tk_rqstp->rq_xprt; in xprt_connect_status()
794 if (task->tk_status == 0) { in xprt_connect_status()
798 task->tk_pid); in xprt_connect_status()
802 switch (task->tk_status) { in xprt_connect_status()
810 dprintk("RPC: %5u xprt_connect_status: retrying\n", task->tk_pid); in xprt_connect_status()
814 "out\n", task->tk_pid); in xprt_connect_status()
818 "server %s\n", task->tk_pid, -task->tk_status, in xprt_connect_status()
820 task->tk_status = -EIO; in xprt_connect_status()
871 struct rpc_task *task = req->rq_task; in xprt_unpin_rqst() local
873 clear_bit(RPC_TASK_MSG_RECV, &task->tk_runstate); in xprt_unpin_rqst()
874 if (test_bit(RPC_TASK_MSG_RECV_WAIT, &task->tk_runstate)) in xprt_unpin_rqst()
875 wake_up_bit(&task->tk_runstate, RPC_TASK_MSG_RECV); in xprt_unpin_rqst()
882 struct rpc_task *task = req->rq_task; in xprt_wait_on_pinned_rqst() local
884 if (task && test_bit(RPC_TASK_MSG_RECV, &task->tk_runstate)) { in xprt_wait_on_pinned_rqst()
886 set_bit(RPC_TASK_MSG_RECV_WAIT, &task->tk_runstate); in xprt_wait_on_pinned_rqst()
887 wait_on_bit(&task->tk_runstate, RPC_TASK_MSG_RECV, in xprt_wait_on_pinned_rqst()
889 clear_bit(RPC_TASK_MSG_RECV_WAIT, &task->tk_runstate); in xprt_wait_on_pinned_rqst()
900 void xprt_update_rtt(struct rpc_task *task) in xprt_update_rtt() argument
902 struct rpc_rqst *req = task->tk_rqstp; in xprt_update_rtt()
903 struct rpc_rtt *rtt = task->tk_client->cl_rtt; in xprt_update_rtt()
904 unsigned int timer = task->tk_msg.rpc_proc->p_timer; in xprt_update_rtt()
922 void xprt_complete_rqst(struct rpc_task *task, int copied) in xprt_complete_rqst() argument
924 struct rpc_rqst *req = task->tk_rqstp; in xprt_complete_rqst()
928 task->tk_pid, ntohl(req->rq_xid), copied); in xprt_complete_rqst()
939 rpc_wake_up_queued_task(&xprt->pending, task); in xprt_complete_rqst()
943 static void xprt_timer(struct rpc_task *task) in xprt_timer() argument
945 struct rpc_rqst *req = task->tk_rqstp; in xprt_timer()
948 if (task->tk_status != -ETIMEDOUT) in xprt_timer()
951 trace_xprt_timer(xprt, req->rq_xid, task->tk_status); in xprt_timer()
954 xprt->ops->timer(xprt, task); in xprt_timer()
956 task->tk_status = 0; in xprt_timer()
964 bool xprt_prepare_transmit(struct rpc_task *task) in xprt_prepare_transmit() argument
966 struct rpc_rqst *req = task->tk_rqstp; in xprt_prepare_transmit()
970 dprintk("RPC: %5u xprt_prepare_transmit\n", task->tk_pid); in xprt_prepare_transmit()
975 task->tk_status = req->rq_reply_bytes_recvd; in xprt_prepare_transmit()
978 if ((task->tk_flags & RPC_TASK_NO_RETRANS_TIMEOUT) in xprt_prepare_transmit()
981 xprt->ops->set_retrans_timeout(task); in xprt_prepare_transmit()
982 rpc_sleep_on(&xprt->pending, task, xprt_timer); in xprt_prepare_transmit()
986 if (!xprt->ops->reserve_xprt(xprt, task)) { in xprt_prepare_transmit()
987 task->tk_status = -EAGAIN; in xprt_prepare_transmit()
996 void xprt_end_transmit(struct rpc_task *task) in xprt_end_transmit() argument
998 xprt_release_write(task->tk_rqstp->rq_xprt, task); in xprt_end_transmit()
1007 void xprt_transmit(struct rpc_task *task) in xprt_transmit() argument
1009 struct rpc_rqst *req = task->tk_rqstp; in xprt_transmit()
1014 dprintk("RPC: %5u xprt_transmit(%u)\n", task->tk_pid, req->rq_slen); in xprt_transmit()
1017 if (list_empty(&req->rq_list) && rpc_reply_expected(task)) { in xprt_transmit()
1036 status = xprt->ops->send_request(task); in xprt_transmit()
1039 task->tk_status = status; in xprt_transmit()
1044 dprintk("RPC: %5u xmit complete\n", task->tk_pid); in xprt_transmit()
1045 task->tk_flags |= RPC_TASK_SENT; in xprt_transmit()
1048 xprt->ops->set_retrans_timeout(task); in xprt_transmit()
1058 if (rpc_reply_expected(task) && !READ_ONCE(req->rq_reply_bytes_recvd)) { in xprt_transmit()
1066 rpc_sleep_on(&xprt->pending, task, xprt_timer); in xprt_transmit()
1079 static void xprt_add_backlog(struct rpc_xprt *xprt, struct rpc_task *task) in xprt_add_backlog() argument
1082 rpc_sleep_on(&xprt->backlog, task, NULL); in xprt_add_backlog()
1091 static bool xprt_throttle_congested(struct rpc_xprt *xprt, struct rpc_task *task) in xprt_throttle_congested() argument
1099 rpc_sleep_on(&xprt->backlog, task, NULL); in xprt_throttle_congested()
1135 void xprt_alloc_slot(struct rpc_xprt *xprt, struct rpc_task *task) in xprt_alloc_slot() argument
1152 task->tk_status = -ENOMEM; in xprt_alloc_slot()
1155 xprt_add_backlog(xprt, task); in xprt_alloc_slot()
1159 task->tk_status = -EAGAIN; in xprt_alloc_slot()
1168 task->tk_status = 0; in xprt_alloc_slot()
1169 task->tk_rqstp = req; in xprt_alloc_slot()
1173 void xprt_lock_and_alloc_slot(struct rpc_xprt *xprt, struct rpc_task *task) in xprt_lock_and_alloc_slot() argument
1180 if (xprt_lock_write(xprt, task)) { in xprt_lock_and_alloc_slot()
1181 xprt_alloc_slot(xprt, task); in xprt_lock_and_alloc_slot()
1182 xprt_release_write(xprt, task); in xprt_lock_and_alloc_slot()
1261 void xprt_reserve(struct rpc_task *task) in xprt_reserve() argument
1263 struct rpc_xprt *xprt = task->tk_xprt; in xprt_reserve()
1265 task->tk_status = 0; in xprt_reserve()
1266 if (task->tk_rqstp != NULL) in xprt_reserve()
1269 task->tk_timeout = 0; in xprt_reserve()
1270 task->tk_status = -EAGAIN; in xprt_reserve()
1271 if (!xprt_throttle_congested(xprt, task)) in xprt_reserve()
1272 xprt->ops->alloc_slot(xprt, task); in xprt_reserve()
1284 void xprt_retry_reserve(struct rpc_task *task) in xprt_retry_reserve() argument
1286 struct rpc_xprt *xprt = task->tk_xprt; in xprt_retry_reserve()
1288 task->tk_status = 0; in xprt_retry_reserve()
1289 if (task->tk_rqstp != NULL) in xprt_retry_reserve()
1292 task->tk_timeout = 0; in xprt_retry_reserve()
1293 task->tk_status = -EAGAIN; in xprt_retry_reserve()
1294 xprt->ops->alloc_slot(xprt, task); in xprt_retry_reserve()
1312 void xprt_request_init(struct rpc_task *task) in xprt_request_init() argument
1314 struct rpc_xprt *xprt = task->tk_xprt; in xprt_request_init()
1315 struct rpc_rqst *req = task->tk_rqstp; in xprt_request_init()
1318 req->rq_timeout = task->tk_client->cl_timeout->to_initval; in xprt_request_init()
1319 req->rq_task = task; in xprt_request_init()
1331 dprintk("RPC: %5u reserved req %p xid %08x\n", task->tk_pid, in xprt_request_init()
1340 void xprt_release(struct rpc_task *task) in xprt_release() argument
1343 struct rpc_rqst *req = task->tk_rqstp; in xprt_release()
1346 if (task->tk_client) { in xprt_release()
1347 xprt = task->tk_xprt; in xprt_release()
1348 if (xprt->snd_task == task) in xprt_release()
1349 xprt_release_write(xprt, task); in xprt_release()
1355 if (task->tk_ops->rpc_count_stats != NULL) in xprt_release()
1356 task->tk_ops->rpc_count_stats(task, task->tk_calldata); in xprt_release()
1357 else if (task->tk_client) in xprt_release()
1358 rpc_count_iostats(task, task->tk_client->cl_metrics); in xprt_release()
1366 xprt->ops->release_xprt(xprt, task); in xprt_release()
1368 xprt->ops->release_request(task); in xprt_release()
1373 xprt->ops->buf_free(task); in xprt_release()
1377 task->tk_rqstp = NULL; in xprt_release()
1381 dprintk("RPC: %5u release request %p\n", task->tk_pid, req); in xprt_release()