Lines Matching refs:req

76 static int	xprt_request_prepare(struct rpc_rqst *req, struct xdr_buf *buf);
81 static unsigned long xprt_request_timeout(const struct rpc_rqst *req) in xprt_request_timeout() argument
83 unsigned long timeout = jiffies + req->rq_timeout; in xprt_request_timeout()
85 if (time_before(timeout, req->rq_majortimeo)) in xprt_request_timeout()
87 return req->rq_majortimeo; in xprt_request_timeout()
267 struct rpc_rqst *req = task->tk_rqstp; in xprt_reserve_xprt() local
288 xprt_request_timeout(req)); in xprt_reserve_xprt()
331 struct rpc_rqst *req = task->tk_rqstp; in xprt_reserve_xprt_cong() local
338 if (req == NULL) { in xprt_reserve_xprt_cong()
354 xprt_request_timeout(req)); in xprt_reserve_xprt_cong()
461 __xprt_get_cong(struct rpc_xprt *xprt, struct rpc_rqst *req) in __xprt_get_cong() argument
463 if (req->rq_cong) in __xprt_get_cong()
465 trace_xprt_get_cong(xprt, req->rq_task); in __xprt_get_cong()
470 req->rq_cong = 1; in __xprt_get_cong()
480 __xprt_put_cong(struct rpc_xprt *xprt, struct rpc_rqst *req) in __xprt_put_cong() argument
482 if (!req->rq_cong) in __xprt_put_cong()
484 req->rq_cong = 0; in __xprt_put_cong()
487 trace_xprt_put_cong(xprt, req->rq_task); in __xprt_put_cong()
499 xprt_request_get_cong(struct rpc_xprt *xprt, struct rpc_rqst *req) in xprt_request_get_cong() argument
503 if (req->rq_cong) in xprt_request_get_cong()
506 ret = __xprt_get_cong(xprt, req) != 0; in xprt_request_get_cong()
520 struct rpc_rqst *req = task->tk_rqstp; in xprt_release_rqst_cong() local
522 __xprt_put_cong(req->rq_xprt, req); in xprt_release_rqst_cong()
564 struct rpc_rqst *req = task->tk_rqstp; in xprt_adjust_cwnd() local
582 __xprt_put_cong(xprt, req); in xprt_adjust_cwnd()
654 static unsigned long xprt_calc_majortimeo(struct rpc_rqst *req, in xprt_calc_majortimeo() argument
657 unsigned long majortimeo = req->rq_timeout; in xprt_calc_majortimeo()
668 static void xprt_reset_majortimeo(struct rpc_rqst *req, in xprt_reset_majortimeo() argument
671 req->rq_majortimeo += xprt_calc_majortimeo(req, to); in xprt_reset_majortimeo()
674 static void xprt_reset_minortimeo(struct rpc_rqst *req) in xprt_reset_minortimeo() argument
676 req->rq_minortimeo += req->rq_timeout; in xprt_reset_minortimeo()
679 static void xprt_init_majortimeo(struct rpc_task *task, struct rpc_rqst *req, in xprt_init_majortimeo() argument
683 struct rpc_xprt *xprt = req->rq_xprt; in xprt_init_majortimeo()
690 req->rq_timeout = to->to_initval; in xprt_init_majortimeo()
691 req->rq_majortimeo = time_init + xprt_calc_majortimeo(req, to); in xprt_init_majortimeo()
692 req->rq_minortimeo = time_init + req->rq_timeout; in xprt_init_majortimeo()
700 int xprt_adjust_timeout(struct rpc_rqst *req) in xprt_adjust_timeout() argument
702 struct rpc_xprt *xprt = req->rq_xprt; in xprt_adjust_timeout()
703 const struct rpc_timeout *to = req->rq_task->tk_client->cl_timeout; in xprt_adjust_timeout()
706 if (time_before(jiffies, req->rq_majortimeo)) { in xprt_adjust_timeout()
707 if (time_before(jiffies, req->rq_minortimeo)) in xprt_adjust_timeout()
710 req->rq_timeout <<= 1; in xprt_adjust_timeout()
712 req->rq_timeout += to->to_increment; in xprt_adjust_timeout()
713 if (to->to_maxval && req->rq_timeout >= to->to_maxval) in xprt_adjust_timeout()
714 req->rq_timeout = to->to_maxval; in xprt_adjust_timeout()
715 req->rq_retries++; in xprt_adjust_timeout()
717 req->rq_timeout = to->to_initval; in xprt_adjust_timeout()
718 req->rq_retries = 0; in xprt_adjust_timeout()
719 xprt_reset_majortimeo(req, to); in xprt_adjust_timeout()
722 rpc_init_rtt(req->rq_task->tk_client->cl_rtt, to->to_initval); in xprt_adjust_timeout()
726 xprt_reset_minortimeo(req); in xprt_adjust_timeout()
728 if (req->rq_timeout == 0) { in xprt_adjust_timeout()
730 req->rq_timeout = 5 * HZ; in xprt_adjust_timeout()
808 struct rpc_rqst *req = task->tk_rqstp; in xprt_request_retransmit_after_disconnect() local
809 struct rpc_xprt *xprt = req->rq_xprt; in xprt_request_retransmit_after_disconnect()
811 return req->rq_connect_cookie != xprt_connect_cookie(xprt) || in xprt_request_retransmit_after_disconnect()
1009 struct rpc_rqst *req; in xprt_request_rb_find() local
1012 req = rb_entry(n, struct rpc_rqst, rq_recv); in xprt_request_rb_find()
1013 switch (xprt_xid_cmp(xid, req->rq_xid)) { in xprt_request_rb_find()
1021 return req; in xprt_request_rb_find()
1032 struct rpc_rqst *req; in xprt_request_rb_insert() local
1036 req = rb_entry(n, struct rpc_rqst, rq_recv); in xprt_request_rb_insert()
1037 switch(xprt_xid_cmp(new->rq_xid, req->rq_xid)) { in xprt_request_rb_insert()
1045 WARN_ON_ONCE(new != req); in xprt_request_rb_insert()
1054 xprt_request_rb_remove(struct rpc_xprt *xprt, struct rpc_rqst *req) in xprt_request_rb_remove() argument
1056 rb_erase(&req->rq_recv, &xprt->recv_queue); in xprt_request_rb_remove()
1086 xprt_is_pinned_rqst(struct rpc_rqst *req) in xprt_is_pinned_rqst() argument
1088 return atomic_read(&req->rq_pin) != 0; in xprt_is_pinned_rqst()
1098 void xprt_pin_rqst(struct rpc_rqst *req) in xprt_pin_rqst() argument
1100 atomic_inc(&req->rq_pin); in xprt_pin_rqst()
1110 void xprt_unpin_rqst(struct rpc_rqst *req) in xprt_unpin_rqst() argument
1112 if (!test_bit(RPC_TASK_MSG_PIN_WAIT, &req->rq_task->tk_runstate)) { in xprt_unpin_rqst()
1113 atomic_dec(&req->rq_pin); in xprt_unpin_rqst()
1116 if (atomic_dec_and_test(&req->rq_pin)) in xprt_unpin_rqst()
1117 wake_up_var(&req->rq_pin); in xprt_unpin_rqst()
1121 static void xprt_wait_on_pinned_rqst(struct rpc_rqst *req) in xprt_wait_on_pinned_rqst() argument
1123 wait_var_event(&req->rq_pin, !xprt_is_pinned_rqst(req)); in xprt_wait_on_pinned_rqst()
1134 xprt_request_need_enqueue_receive(struct rpc_task *task, struct rpc_rqst *req) in xprt_request_need_enqueue_receive() argument
1148 struct rpc_rqst *req = task->tk_rqstp; in xprt_request_enqueue_receive() local
1149 struct rpc_xprt *xprt = req->rq_xprt; in xprt_request_enqueue_receive()
1152 if (!xprt_request_need_enqueue_receive(task, req)) in xprt_request_enqueue_receive()
1155 ret = xprt_request_prepare(task->tk_rqstp, &req->rq_rcv_buf); in xprt_request_enqueue_receive()
1161 memcpy(&req->rq_private_buf, &req->rq_rcv_buf, in xprt_request_enqueue_receive()
1162 sizeof(req->rq_private_buf)); in xprt_request_enqueue_receive()
1165 xprt_request_rb_insert(xprt, req); in xprt_request_enqueue_receive()
1183 struct rpc_rqst *req = task->tk_rqstp; in xprt_request_dequeue_receive_locked() local
1186 xprt_request_rb_remove(req->rq_xprt, req); in xprt_request_dequeue_receive_locked()
1197 struct rpc_rqst *req = task->tk_rqstp; in xprt_update_rtt() local
1200 long m = usecs_to_jiffies(ktime_to_us(req->rq_rtt)); in xprt_update_rtt()
1203 if (req->rq_ntrans == 1) in xprt_update_rtt()
1205 rpc_set_timeo(rtt, timer, req->rq_ntrans - 1); in xprt_update_rtt()
1219 struct rpc_rqst *req = task->tk_rqstp; in xprt_complete_rqst() local
1220 struct rpc_xprt *xprt = req->rq_xprt; in xprt_complete_rqst()
1224 xdr_free_bvec(&req->rq_rcv_buf); in xprt_complete_rqst()
1225 req->rq_private_buf.bvec = NULL; in xprt_complete_rqst()
1226 req->rq_private_buf.len = copied; in xprt_complete_rqst()
1230 req->rq_reply_bytes_recvd = copied; in xprt_complete_rqst()
1238 struct rpc_rqst *req = task->tk_rqstp; in xprt_timer() local
1239 struct rpc_xprt *xprt = req->rq_xprt; in xprt_timer()
1244 trace_xprt_timer(xprt, req->rq_xid, task->tk_status); in xprt_timer()
1245 if (!req->rq_reply_bytes_recvd) { in xprt_timer()
1263 struct rpc_rqst *req = task->tk_rqstp; in xprt_wait_for_reply_request_def() local
1265 rpc_sleep_on_timeout(&req->rq_xprt->pending, task, xprt_timer, in xprt_wait_for_reply_request_def()
1266 xprt_request_timeout(req)); in xprt_wait_for_reply_request_def()
1282 struct rpc_rqst *req = task->tk_rqstp; in xprt_wait_for_reply_request_rtt() local
1287 timeout <<= rpc_ntimeo(rtt, timer) + req->rq_retries; in xprt_wait_for_reply_request_rtt()
1290 rpc_sleep_on_timeout(&req->rq_xprt->pending, task, xprt_timer, in xprt_wait_for_reply_request_rtt()
1302 struct rpc_rqst *req = task->tk_rqstp; in xprt_request_wait_receive() local
1303 struct rpc_xprt *xprt = req->rq_xprt; in xprt_request_wait_receive()
1328 xprt_request_need_enqueue_transmit(struct rpc_task *task, struct rpc_rqst *req) in xprt_request_need_enqueue_transmit() argument
1342 struct rpc_rqst *pos, *req = task->tk_rqstp; in xprt_request_enqueue_transmit() local
1343 struct rpc_xprt *xprt = req->rq_xprt; in xprt_request_enqueue_transmit()
1346 if (xprt_request_need_enqueue_transmit(task, req)) { in xprt_request_enqueue_transmit()
1347 ret = xprt_request_prepare(task->tk_rqstp, &req->rq_snd_buf); in xprt_request_enqueue_transmit()
1352 req->rq_bytes_sent = 0; in xprt_request_enqueue_transmit()
1358 if (req->rq_cong) { in xprt_request_enqueue_transmit()
1364 list_add_tail(&req->rq_xmit, &pos->rq_xmit); in xprt_request_enqueue_transmit()
1365 INIT_LIST_HEAD(&req->rq_xmit2); in xprt_request_enqueue_transmit()
1368 } else if (req->rq_seqno_count == 0) { in xprt_request_enqueue_transmit()
1372 list_add_tail(&req->rq_xmit2, &pos->rq_xmit2); in xprt_request_enqueue_transmit()
1373 INIT_LIST_HEAD(&req->rq_xmit); in xprt_request_enqueue_transmit()
1377 list_add_tail(&req->rq_xmit, &xprt->xmit_queue); in xprt_request_enqueue_transmit()
1378 INIT_LIST_HEAD(&req->rq_xmit2); in xprt_request_enqueue_transmit()
1396 struct rpc_rqst *req = task->tk_rqstp; in xprt_request_dequeue_transmit_locked() local
1400 if (!list_empty(&req->rq_xmit)) { in xprt_request_dequeue_transmit_locked()
1401 struct rpc_xprt *xprt = req->rq_xprt; in xprt_request_dequeue_transmit_locked()
1403 if (list_is_first(&req->rq_xmit, &xprt->xmit_queue) && in xprt_request_dequeue_transmit_locked()
1405 xprt->ops->abort_send_request(req); in xprt_request_dequeue_transmit_locked()
1407 list_del(&req->rq_xmit); in xprt_request_dequeue_transmit_locked()
1408 if (!list_empty(&req->rq_xmit2)) { in xprt_request_dequeue_transmit_locked()
1409 struct rpc_rqst *next = list_first_entry(&req->rq_xmit2, in xprt_request_dequeue_transmit_locked()
1411 list_del(&req->rq_xmit2); in xprt_request_dequeue_transmit_locked()
1415 list_del(&req->rq_xmit2); in xprt_request_dequeue_transmit_locked()
1416 atomic_long_dec(&req->rq_xprt->xmit_queuelen); in xprt_request_dequeue_transmit_locked()
1417 xdr_free_bvec(&req->rq_snd_buf); in xprt_request_dequeue_transmit_locked()
1429 struct rpc_rqst *req = task->tk_rqstp; in xprt_request_dequeue_transmit() local
1430 struct rpc_xprt *xprt = req->rq_xprt; in xprt_request_dequeue_transmit()
1447 struct rpc_rqst *req = task->tk_rqstp; in xprt_request_dequeue_xprt() local
1448 struct rpc_xprt *xprt = req->rq_xprt; in xprt_request_dequeue_xprt()
1452 xprt_is_pinned_rqst(req)) { in xprt_request_dequeue_xprt()
1454 while (xprt_is_pinned_rqst(req)) { in xprt_request_dequeue_xprt()
1457 xprt_wait_on_pinned_rqst(req); in xprt_request_dequeue_xprt()
1464 xdr_free_bvec(&req->rq_rcv_buf); in xprt_request_dequeue_xprt()
1478 xprt_request_prepare(struct rpc_rqst *req, struct xdr_buf *buf) in xprt_request_prepare() argument
1480 struct rpc_xprt *xprt = req->rq_xprt; in xprt_request_prepare()
1483 return xprt->ops->prepare_request(req, buf); in xprt_request_prepare()
1506 struct rpc_rqst *req = task->tk_rqstp; in xprt_prepare_transmit() local
1507 struct rpc_xprt *xprt = req->rq_xprt; in xprt_prepare_transmit()
1542 xprt_request_transmit(struct rpc_rqst *req, struct rpc_task *snd_task) in xprt_request_transmit() argument
1544 struct rpc_xprt *xprt = req->rq_xprt; in xprt_request_transmit()
1545 struct rpc_task *task = req->rq_task; in xprt_request_transmit()
1553 if (!req->rq_bytes_sent) { in xprt_request_transmit()
1574 req->rq_ntrans++; in xprt_request_transmit()
1576 trace_rpc_xdr_sendto(task, &req->rq_snd_buf); in xprt_request_transmit()
1578 status = xprt->ops->send_request(req); in xprt_request_transmit()
1580 req->rq_ntrans--; in xprt_request_transmit()
1581 trace_xprt_transmit(req, status); in xprt_request_transmit()
1587 trace_xprt_retransmit(req); in xprt_request_transmit()
1602 req->rq_connect_cookie = connect_cookie; in xprt_request_transmit()
1604 trace_xprt_transmit(req, status); in xprt_request_transmit()
1622 struct rpc_rqst *next, *req = task->tk_rqstp; in xprt_transmit() local
1623 struct rpc_xprt *xprt = req->rq_xprt; in xprt_transmit()
1635 if (status == -EBADMSG && next != req) in xprt_transmit()
1668 struct rpc_rqst *req = data; in __xprt_set_rq() local
1671 memset(req, 0, sizeof(*req)); /* mark unused */ in __xprt_set_rq()
1672 task->tk_rqstp = req; in __xprt_set_rq()
1678 bool xprt_wake_up_backlog(struct rpc_xprt *xprt, struct rpc_rqst *req) in xprt_wake_up_backlog() argument
1680 if (rpc_wake_up_first(&xprt->backlog, __xprt_set_rq, req) == NULL) { in xprt_wake_up_backlog()
1706 struct rpc_rqst *req = ERR_PTR(-EAGAIN); in xprt_dynamic_alloc_slot() local
1712 req = kzalloc(sizeof(*req), rpc_task_gfp_mask()); in xprt_dynamic_alloc_slot()
1714 if (req != NULL) in xprt_dynamic_alloc_slot()
1717 req = ERR_PTR(-ENOMEM); in xprt_dynamic_alloc_slot()
1719 return req; in xprt_dynamic_alloc_slot()
1722 static bool xprt_dynamic_free_slot(struct rpc_xprt *xprt, struct rpc_rqst *req) in xprt_dynamic_free_slot() argument
1726 kfree(req); in xprt_dynamic_free_slot()
1734 struct rpc_rqst *req; in xprt_alloc_slot() local
1738 req = list_entry(xprt->free.next, struct rpc_rqst, rq_list); in xprt_alloc_slot()
1739 list_del(&req->rq_list); in xprt_alloc_slot()
1742 req = xprt_dynamic_alloc_slot(xprt); in xprt_alloc_slot()
1743 if (!IS_ERR(req)) in xprt_alloc_slot()
1745 switch (PTR_ERR(req)) { in xprt_alloc_slot()
1766 task->tk_rqstp = req; in xprt_alloc_slot()
1770 void xprt_free_slot(struct rpc_xprt *xprt, struct rpc_rqst *req) in xprt_free_slot() argument
1773 if (!xprt_wake_up_backlog(xprt, req) && in xprt_free_slot()
1774 !xprt_dynamic_free_slot(xprt, req)) { in xprt_free_slot()
1775 memset(req, 0, sizeof(*req)); /* mark unused */ in xprt_free_slot()
1776 list_add(&req->rq_list, &xprt->free); in xprt_free_slot()
1784 struct rpc_rqst *req; in xprt_free_all_slots() local
1786 req = list_first_entry(&xprt->free, struct rpc_rqst, rq_list); in xprt_free_all_slots()
1787 list_del(&req->rq_list); in xprt_free_all_slots()
1788 kfree(req); in xprt_free_all_slots()
1821 struct rpc_rqst *req; in xprt_alloc() local
1832 req = kzalloc(sizeof(struct rpc_rqst), GFP_KERNEL); in xprt_alloc()
1833 if (!req) in xprt_alloc()
1835 list_add(&req->rq_list, &xprt->free); in xprt_alloc()
1861 xprt_init_connect_cookie(struct rpc_rqst *req, struct rpc_xprt *xprt) in xprt_init_connect_cookie() argument
1863 req->rq_connect_cookie = xprt_connect_cookie(xprt) - 1; in xprt_init_connect_cookie()
1887 struct rpc_rqst *req = task->tk_rqstp; in xprt_request_init() local
1889 req->rq_task = task; in xprt_request_init()
1890 req->rq_xprt = xprt; in xprt_request_init()
1891 req->rq_buffer = NULL; in xprt_request_init()
1892 req->rq_xid = xprt_alloc_xid(xprt); in xprt_request_init()
1893 xprt_init_connect_cookie(req, xprt); in xprt_request_init()
1894 req->rq_snd_buf.len = 0; in xprt_request_init()
1895 req->rq_snd_buf.buflen = 0; in xprt_request_init()
1896 req->rq_rcv_buf.len = 0; in xprt_request_init()
1897 req->rq_rcv_buf.buflen = 0; in xprt_request_init()
1898 req->rq_snd_buf.bvec = NULL; in xprt_request_init()
1899 req->rq_rcv_buf.bvec = NULL; in xprt_request_init()
1900 req->rq_release_snd_buf = NULL; in xprt_request_init()
1901 req->rq_seqno_count = 0; in xprt_request_init()
1902 xprt_init_majortimeo(task, req, task->tk_client->cl_timeout); in xprt_request_init()
1904 trace_xprt_reserve(req); in xprt_request_init()
1965 struct rpc_rqst *req = task->tk_rqstp; in xprt_release() local
1967 if (req == NULL) { in xprt_release()
1975 xprt = req->rq_xprt; in xprt_release()
1983 if (req->rq_buffer) in xprt_release()
1985 if (req->rq_cred != NULL) in xprt_release()
1986 put_rpccred(req->rq_cred); in xprt_release()
1987 if (req->rq_release_snd_buf) in xprt_release()
1988 req->rq_release_snd_buf(req); in xprt_release()
1991 if (likely(!bc_prealloc(req))) in xprt_release()
1992 xprt->ops->free_slot(xprt, req); in xprt_release()
1994 xprt_free_bc_request(req); in xprt_release()
1999 xprt_init_bc_request(struct rpc_rqst *req, struct rpc_task *task, in xprt_init_bc_request() argument
2002 struct xdr_buf *xbufp = &req->rq_snd_buf; in xprt_init_bc_request()
2004 task->tk_rqstp = req; in xprt_init_bc_request()
2005 req->rq_task = task; in xprt_init_bc_request()
2006 xprt_init_connect_cookie(req, req->rq_xprt); in xprt_init_bc_request()
2019 xprt_init_majortimeo(task, req, to); in xprt_init_bc_request()