Lines Matching refs:rqstp
115 * @rqstp: request structure with resources to be released
118 static void svc_tcp_release_rqst(struct svc_rqst *rqstp)
120 struct sk_buff *skb = rqstp->rq_xprt_ctxt;
124 container_of(rqstp->rq_xprt, struct svc_sock, sk_xprt);
126 rqstp->rq_xprt_ctxt = NULL;
133 * @rqstp: request structure with resources to be released
136 static void svc_udp_release_rqst(struct svc_rqst *rqstp)
138 struct sk_buff *skb = rqstp->rq_xprt_ctxt;
141 rqstp->rq_xprt_ctxt = NULL;
153 static void svc_set_cmsg_data(struct svc_rqst *rqstp, struct cmsghdr *cmh)
156 container_of(rqstp->rq_xprt, struct svc_sock, sk_xprt);
165 svc_daddr_in(rqstp)->sin_addr.s_addr;
172 struct sockaddr_in6 *daddr = svc_daddr_in6(rqstp);
184 static int svc_sock_read_payload(struct svc_rqst *rqstp, unsigned int offset,
247 * Read from @rqstp's transport socket. The incoming message fills whole
248 * pages in @rqstp's rq_pages array until the last page of the message
251 static ssize_t svc_tcp_read_msg(struct svc_rqst *rqstp, size_t buflen,
255 container_of(rqstp->rq_xprt, struct svc_sock, sk_xprt);
256 struct bio_vec *bvec = rqstp->rq_bvec;
262 rqstp->rq_xprt_hlen = 0;
267 bvec[i].bv_page = rqstp->rq_pages[i];
271 rqstp->rq_respages = &rqstp->rq_pages[i];
272 rqstp->rq_next_page = rqstp->rq_respages + 1;
309 static void svc_sock_secure_port(struct svc_rqst *rqstp)
311 if (svc_port_is_privileged(svc_addr(rqstp)))
312 set_bit(RQ_SECURE, &rqstp->rq_flags);
314 clear_bit(RQ_SECURE, &rqstp->rq_flags);
369 static int svc_udp_get_dest_address4(struct svc_rqst *rqstp,
373 struct sockaddr_in *daddr = svc_daddr_in(rqstp);
386 static int svc_udp_get_dest_address6(struct svc_rqst *rqstp,
390 struct sockaddr_in6 *daddr = svc_daddr_in6(rqstp);
402 * Copy the UDP datagram's destination address to the rqstp structure.
408 static int svc_udp_get_dest_address(struct svc_rqst *rqstp,
413 return svc_udp_get_dest_address4(rqstp, cmh);
415 return svc_udp_get_dest_address6(rqstp, cmh);
423 * @rqstp: request structure into which to receive an RPC Call
431 static int svc_udp_recvfrom(struct svc_rqst *rqstp)
434 container_of(rqstp->rq_xprt, struct svc_sock, sk_xprt);
443 .msg_name = svc_addr(rqstp),
471 len = svc_addr_len(svc_addr(rqstp));
472 rqstp->rq_addrlen = len;
482 rqstp->rq_arg.len = len;
485 rqstp->rq_prot = IPPROTO_UDP;
487 if (!svc_udp_get_dest_address(rqstp, cmh))
489 rqstp->rq_daddrlen = svc_addr_len(svc_daddr(rqstp));
494 if (csum_partial_copy_to_xdr(&rqstp->rq_arg, skb))
500 rqstp->rq_arg.head[0].iov_base = skb->data;
501 rqstp->rq_arg.head[0].iov_len = len;
504 rqstp->rq_xprt_ctxt = skb;
507 rqstp->rq_arg.page_base = 0;
508 if (len <= rqstp->rq_arg.head[0].iov_len) {
509 rqstp->rq_arg.head[0].iov_len = len;
510 rqstp->rq_arg.page_len = 0;
511 rqstp->rq_respages = rqstp->rq_pages+1;
513 rqstp->rq_arg.page_len = len - rqstp->rq_arg.head[0].iov_len;
514 rqstp->rq_respages = rqstp->rq_pages + 1 +
515 DIV_ROUND_UP(rqstp->rq_arg.page_len, PAGE_SIZE);
517 rqstp->rq_next_page = rqstp->rq_respages+1;
544 * @rqstp: completed svc_rqst
546 * xpt_mutex ensures @rqstp's whole message is written to the socket
551 static int svc_udp_sendto(struct svc_rqst *rqstp)
553 struct svc_xprt *xprt = rqstp->rq_xprt;
555 struct xdr_buf *xdr = &rqstp->rq_res;
562 .msg_name = &rqstp->rq_addr,
563 .msg_namelen = rqstp->rq_addrlen,
570 svc_udp_release_rqst(rqstp);
572 svc_set_cmsg_data(rqstp, cmh);
811 struct svc_rqst *rqstp)
820 if (rqstp->rq_pages[i] != NULL)
821 put_page(rqstp->rq_pages[i]);
823 rqstp->rq_pages[i] = svsk->sk_pages[i];
826 rqstp->rq_arg.head[0].iov_base = page_address(rqstp->rq_pages[0]);
830 static void svc_tcp_save_pages(struct svc_sock *svsk, struct svc_rqst *rqstp)
839 svsk->sk_pages[i] = rqstp->rq_pages[i];
840 rqstp->rq_pages[i] = NULL;
869 struct svc_rqst *rqstp)
908 static int receive_cb_reply(struct svc_sock *svsk, struct svc_rqst *rqstp)
913 __be32 *p = (__be32 *)rqstp->rq_arg.head[0].iov_base;
934 src = &rqstp->rq_arg.head[0];
938 xprt_complete_rqst(req->rq_task, rqstp->rq_arg.len);
939 rqstp->rq_arg.len = 0;
962 * @rqstp: request structure into which to receive an RPC Call
968 * the next RPC message into @rqstp.
978 static int svc_tcp_recvfrom(struct svc_rqst *rqstp)
981 container_of(rqstp->rq_xprt, struct svc_sock, sk_xprt);
989 len = svc_tcp_read_marker(svsk, rqstp);
993 base = svc_tcp_restore_pages(svsk, rqstp);
995 len = svc_tcp_read_msg(rqstp, base + want, base);
1006 rqstp->rq_arg.len = svsk->sk_datalen;
1007 rqstp->rq_arg.page_base = 0;
1008 if (rqstp->rq_arg.len <= rqstp->rq_arg.head[0].iov_len) {
1009 rqstp->rq_arg.head[0].iov_len = rqstp->rq_arg.len;
1010 rqstp->rq_arg.page_len = 0;
1012 rqstp->rq_arg.page_len = rqstp->rq_arg.len - rqstp->rq_arg.head[0].iov_len;
1014 rqstp->rq_xprt_ctxt = NULL;
1015 rqstp->rq_prot = IPPROTO_TCP;
1017 set_bit(RQ_LOCAL, &rqstp->rq_flags);
1019 clear_bit(RQ_LOCAL, &rqstp->rq_flags);
1021 p = (__be32 *)rqstp->rq_arg.head[0].iov_base;
1024 len = receive_cb_reply(svsk, rqstp);
1033 svc_xprt_copy_addrs(rqstp, &svsk->sk_xprt);
1037 return rqstp->rq_arg.len;
1040 svc_tcp_save_pages(svsk, rqstp);
1153 * @rqstp: completed svc_rqst
1155 * xpt_mutex ensures @rqstp's whole message is written to the socket
1160 static int svc_tcp_sendto(struct svc_rqst *rqstp)
1162 struct svc_xprt *xprt = rqstp->rq_xprt;
1164 struct xdr_buf *xdr = &rqstp->rq_res;
1173 svc_tcp_release_rqst(rqstp);