Lines Matching refs:req

78 static unsigned long xprt_request_timeout(const struct rpc_rqst *req)
80 unsigned long timeout = jiffies + req->rq_timeout;
82 if (time_before(timeout, req->rq_majortimeo))
84 return req->rq_majortimeo;
238 struct rpc_rqst *req = task->tk_rqstp;
259 xprt_request_timeout(req));
302 struct rpc_rqst *req = task->tk_rqstp;
309 if (req == NULL) {
325 xprt_request_timeout(req));
432 __xprt_get_cong(struct rpc_xprt *xprt, struct rpc_rqst *req)
434 if (req->rq_cong)
436 trace_xprt_get_cong(xprt, req->rq_task);
441 req->rq_cong = 1;
451 __xprt_put_cong(struct rpc_xprt *xprt, struct rpc_rqst *req)
453 if (!req->rq_cong)
455 req->rq_cong = 0;
458 trace_xprt_put_cong(xprt, req->rq_task);
465 * @req: pointer to RPC request
470 xprt_request_get_cong(struct rpc_xprt *xprt, struct rpc_rqst *req)
474 if (req->rq_cong)
477 ret = __xprt_get_cong(xprt, req) != 0;
491 struct rpc_rqst *req = task->tk_rqstp;
493 __xprt_put_cong(req->rq_xprt, req);
535 struct rpc_rqst *req = task->tk_rqstp;
553 __xprt_put_cong(xprt, req);
625 static unsigned long xprt_calc_majortimeo(struct rpc_rqst *req)
627 const struct rpc_timeout *to = req->rq_task->tk_client->cl_timeout;
628 unsigned long majortimeo = req->rq_timeout;
639 static void xprt_reset_majortimeo(struct rpc_rqst *req)
641 req->rq_majortimeo += xprt_calc_majortimeo(req);
644 static void xprt_reset_minortimeo(struct rpc_rqst *req)
646 req->rq_minortimeo += req->rq_timeout;
649 static void xprt_init_majortimeo(struct rpc_task *task, struct rpc_rqst *req)
652 struct rpc_xprt *xprt = req->rq_xprt;
658 req->rq_timeout = task->tk_client->cl_timeout->to_initval;
659 req->rq_majortimeo = time_init + xprt_calc_majortimeo(req);
660 req->rq_minortimeo = time_init + req->rq_timeout;
665 * @req: RPC request containing parameters to use for the adjustment
668 int xprt_adjust_timeout(struct rpc_rqst *req)
670 struct rpc_xprt *xprt = req->rq_xprt;
671 const struct rpc_timeout *to = req->rq_task->tk_client->cl_timeout;
674 if (time_before(jiffies, req->rq_majortimeo)) {
675 if (time_before(jiffies, req->rq_minortimeo))
678 req->rq_timeout <<= 1;
680 req->rq_timeout += to->to_increment;
681 if (to->to_maxval && req->rq_timeout >= to->to_maxval)
682 req->rq_timeout = to->to_maxval;
683 req->rq_retries++;
685 req->rq_timeout = to->to_initval;
686 req->rq_retries = 0;
687 xprt_reset_majortimeo(req);
690 rpc_init_rtt(req->rq_task->tk_client->cl_rtt, to->to_initval);
694 xprt_reset_minortimeo(req);
696 if (req->rq_timeout == 0) {
698 req->rq_timeout = 5 * HZ;
774 struct rpc_rqst *req = task->tk_rqstp;
775 struct rpc_xprt *xprt = req->rq_xprt;
777 return req->rq_connect_cookie != xprt_connect_cookie(xprt) ||
962 struct rpc_rqst *req;
965 req = rb_entry(n, struct rpc_rqst, rq_recv);
966 switch (xprt_xid_cmp(xid, req->rq_xid)) {
974 return req;
985 struct rpc_rqst *req;
989 req = rb_entry(n, struct rpc_rqst, rq_recv);
990 switch(xprt_xid_cmp(new->rq_xid, req->rq_xid)) {
998 WARN_ON_ONCE(new != req);
1007 xprt_request_rb_remove(struct rpc_xprt *xprt, struct rpc_rqst *req)
1009 rb_erase(&req->rq_recv, &xprt->recv_queue);
1039 xprt_is_pinned_rqst(struct rpc_rqst *req)
1041 return atomic_read(&req->rq_pin) != 0;
1046 * @req: Request to pin
1051 void xprt_pin_rqst(struct rpc_rqst *req)
1053 atomic_inc(&req->rq_pin);
1059 * @req: Request to pin
1063 void xprt_unpin_rqst(struct rpc_rqst *req)
1065 if (!test_bit(RPC_TASK_MSG_PIN_WAIT, &req->rq_task->tk_runstate)) {
1066 atomic_dec(&req->rq_pin);
1069 if (atomic_dec_and_test(&req->rq_pin))
1070 wake_up_var(&req->rq_pin);
1074 static void xprt_wait_on_pinned_rqst(struct rpc_rqst *req)
1076 wait_var_event(&req->rq_pin, !xprt_is_pinned_rqst(req));
1087 xprt_request_need_enqueue_receive(struct rpc_task *task, struct rpc_rqst *req)
1101 struct rpc_rqst *req = task->tk_rqstp;
1102 struct rpc_xprt *xprt = req->rq_xprt;
1104 if (!xprt_request_need_enqueue_receive(task, req))
1111 memcpy(&req->rq_private_buf, &req->rq_rcv_buf,
1112 sizeof(req->rq_private_buf));
1115 xprt_request_rb_insert(xprt, req);
1132 struct rpc_rqst *req = task->tk_rqstp;
1135 xprt_request_rb_remove(req->rq_xprt, req);
1146 struct rpc_rqst *req = task->tk_rqstp;
1149 long m = usecs_to_jiffies(ktime_to_us(req->rq_rtt));
1152 if (req->rq_ntrans == 1)
1154 rpc_set_timeo(rtt, timer, req->rq_ntrans - 1);
1168 struct rpc_rqst *req = task->tk_rqstp;
1169 struct rpc_xprt *xprt = req->rq_xprt;
1173 req->rq_private_buf.len = copied;
1175 /* req->rq_reply_bytes_recvd */
1177 req->rq_reply_bytes_recvd = copied;
1185 struct rpc_rqst *req = task->tk_rqstp;
1186 struct rpc_xprt *xprt = req->rq_xprt;
1191 trace_xprt_timer(xprt, req->rq_xid, task->tk_status);
1192 if (!req->rq_reply_bytes_recvd) {
1210 struct rpc_rqst *req = task->tk_rqstp;
1212 rpc_sleep_on_timeout(&req->rq_xprt->pending, task, xprt_timer,
1213 xprt_request_timeout(req));
1229 struct rpc_rqst *req = task->tk_rqstp;
1234 timeout <<= rpc_ntimeo(rtt, timer) + req->rq_retries;
1237 rpc_sleep_on_timeout(&req->rq_xprt->pending, task, xprt_timer,
1249 struct rpc_rqst *req = task->tk_rqstp;
1250 struct rpc_xprt *xprt = req->rq_xprt;
1257 * req->rq_reply_bytes_recvd, and the call to rpc_sleep_on().
1275 xprt_request_need_enqueue_transmit(struct rpc_task *task, struct rpc_rqst *req)
1289 struct rpc_rqst *pos, *req = task->tk_rqstp;
1290 struct rpc_xprt *xprt = req->rq_xprt;
1292 if (xprt_request_need_enqueue_transmit(task, req)) {
1293 req->rq_bytes_sent = 0;
1299 if (req->rq_cong) {
1304 /* Note: req is added _before_ pos */
1305 list_add_tail(&req->rq_xmit, &pos->rq_xmit);
1306 INIT_LIST_HEAD(&req->rq_xmit2);
1309 } else if (!req->rq_seqno) {
1313 list_add_tail(&req->rq_xmit2, &pos->rq_xmit2);
1314 INIT_LIST_HEAD(&req->rq_xmit);
1318 list_add_tail(&req->rq_xmit, &xprt->xmit_queue);
1319 INIT_LIST_HEAD(&req->rq_xmit2);
1336 struct rpc_rqst *req = task->tk_rqstp;
1340 if (!list_empty(&req->rq_xmit)) {
1341 list_del(&req->rq_xmit);
1342 if (!list_empty(&req->rq_xmit2)) {
1343 struct rpc_rqst *next = list_first_entry(&req->rq_xmit2,
1345 list_del(&req->rq_xmit2);
1349 list_del(&req->rq_xmit2);
1361 struct rpc_rqst *req = task->tk_rqstp;
1362 struct rpc_xprt *xprt = req->rq_xprt;
1379 struct rpc_rqst *req = task->tk_rqstp;
1380 struct rpc_xprt *xprt = req->rq_xprt;
1384 xprt_is_pinned_rqst(req)) {
1388 while (xprt_is_pinned_rqst(req)) {
1391 xprt_wait_on_pinned_rqst(req);
1401 * @req: pointer to rpc_rqst
1407 xprt_request_prepare(struct rpc_rqst *req)
1409 struct rpc_xprt *xprt = req->rq_xprt;
1412 xprt->ops->prepare_request(req);
1434 struct rpc_rqst *req = task->tk_rqstp;
1435 struct rpc_xprt *xprt = req->rq_xprt;
1458 * @req: pointer to request to transmit
1467 xprt_request_transmit(struct rpc_rqst *req, struct rpc_task *snd_task)
1469 struct rpc_xprt *xprt = req->rq_xprt;
1470 struct rpc_task *task = req->rq_task;
1475 if (!req->rq_bytes_sent) {
1492 * Update req->rq_ntrans before transmitting to avoid races with
1496 req->rq_ntrans++;
1498 trace_rpc_xdr_sendto(task, &req->rq_snd_buf);
1500 status = xprt->ops->send_request(req);
1502 req->rq_ntrans--;
1503 trace_xprt_transmit(req, status);
1522 req->rq_connect_cookie = connect_cookie;
1524 trace_xprt_transmit(req, status);
1542 struct rpc_rqst *next, *req = task->tk_rqstp;
1543 struct rpc_xprt *xprt = req->rq_xprt;
1555 if (status == -EBADMSG && next != req)
1588 struct rpc_rqst *req = data;
1591 memset(req, 0, sizeof(*req)); /* mark unused */
1592 task->tk_rqstp = req;
1598 bool xprt_wake_up_backlog(struct rpc_xprt *xprt, struct rpc_rqst *req)
1600 if (rpc_wake_up_first(&xprt->backlog, __xprt_set_rq, req) == NULL) {
1626 struct rpc_rqst *req = ERR_PTR(-EAGAIN);
1635 req = kzalloc(sizeof(*req), gfp_mask);
1637 if (req != NULL)
1640 req = ERR_PTR(-ENOMEM);
1642 return req;
1645 static bool xprt_dynamic_free_slot(struct rpc_xprt *xprt, struct rpc_rqst *req)
1649 kfree(req);
1657 struct rpc_rqst *req;
1661 req = list_entry(xprt->free.next, struct rpc_rqst, rq_list);
1662 list_del(&req->rq_list);
1665 req = xprt_dynamic_alloc_slot(xprt);
1666 if (!IS_ERR(req))
1668 switch (PTR_ERR(req)) {
1689 task->tk_rqstp = req;
1693 void xprt_free_slot(struct rpc_xprt *xprt, struct rpc_rqst *req)
1696 if (!xprt_wake_up_backlog(xprt, req) &&
1697 !xprt_dynamic_free_slot(xprt, req)) {
1698 memset(req, 0, sizeof(*req)); /* mark unused */
1699 list_add(&req->rq_list, &xprt->free);
1707 struct rpc_rqst *req;
1709 req = list_first_entry(&xprt->free, struct rpc_rqst, rq_list);
1710 list_del(&req->rq_list);
1711 kfree(req);
1720 struct rpc_rqst *req;
1730 req = kzalloc(sizeof(struct rpc_rqst), GFP_KERNEL);
1731 if (!req)
1733 list_add(&req->rq_list, &xprt->free);
1760 xprt_init_connect_cookie(struct rpc_rqst *req, struct rpc_xprt *xprt)
1762 req->rq_connect_cookie = xprt_connect_cookie(xprt) - 1;
1786 struct rpc_rqst *req = task->tk_rqstp;
1788 req->rq_task = task;
1789 req->rq_xprt = xprt;
1790 req->rq_buffer = NULL;
1791 req->rq_xid = xprt_alloc_xid(xprt);
1792 xprt_init_connect_cookie(req, xprt);
1793 req->rq_snd_buf.len = 0;
1794 req->rq_snd_buf.buflen = 0;
1795 req->rq_rcv_buf.len = 0;
1796 req->rq_rcv_buf.buflen = 0;
1797 req->rq_snd_buf.bvec = NULL;
1798 req->rq_rcv_buf.bvec = NULL;
1799 req->rq_release_snd_buf = NULL;
1800 xprt_init_majortimeo(task, req);
1802 trace_xprt_reserve(req);
1863 struct rpc_rqst *req = task->tk_rqstp;
1865 if (req == NULL) {
1873 xprt = req->rq_xprt;
1881 if (req->rq_buffer)
1883 xdr_free_bvec(&req->rq_rcv_buf);
1884 xdr_free_bvec(&req->rq_snd_buf);
1885 if (req->rq_cred != NULL)
1886 put_rpccred(req->rq_cred);
1887 if (req->rq_release_snd_buf)
1888 req->rq_release_snd_buf(req);
1891 if (likely(!bc_prealloc(req)))
1892 xprt->ops->free_slot(xprt, req);
1894 xprt_free_bc_request(req);
1899 xprt_init_bc_request(struct rpc_rqst *req, struct rpc_task *task)
1901 struct xdr_buf *xbufp = &req->rq_snd_buf;
1903 task->tk_rqstp = req;
1904 req->rq_task = task;
1905 xprt_init_connect_cookie(req, req->rq_xprt);