Lines Matching refs:rqstp

128  * @ctxt: the context from rqstp->rq_xprt_ctxt or dr->xprt_ctxt
138 * @ctxt: the context from rqstp->rq_xprt_ctxt or dr->xprt_ctxt
156 static void svc_set_cmsg_data(struct svc_rqst *rqstp, struct cmsghdr *cmh)
159 container_of(rqstp->rq_xprt, struct svc_sock, sk_xprt);
168 svc_daddr_in(rqstp)->sin_addr.s_addr;
175 struct sockaddr_in6 *daddr = svc_daddr_in6(rqstp);
187 static int svc_sock_result_payload(struct svc_rqst *rqstp, unsigned int offset,
297 * Read from @rqstp's transport socket. The incoming message fills whole
298 * pages in @rqstp's rq_pages array until the last page of the message
301 static ssize_t svc_tcp_read_msg(struct svc_rqst *rqstp, size_t buflen,
305 container_of(rqstp->rq_xprt, struct svc_sock, sk_xprt);
306 struct bio_vec *bvec = rqstp->rq_bvec;
315 bvec_set_page(&bvec[i], rqstp->rq_pages[i], PAGE_SIZE, 0);
316 rqstp->rq_respages = &rqstp->rq_pages[i];
317 rqstp->rq_next_page = rqstp->rq_respages + 1;
354 static void svc_sock_secure_port(struct svc_rqst *rqstp)
356 if (svc_port_is_privileged(svc_addr(rqstp)))
357 set_bit(RQ_SECURE, &rqstp->rq_flags);
359 clear_bit(RQ_SECURE, &rqstp->rq_flags);
500 static int svc_udp_get_dest_address4(struct svc_rqst *rqstp,
504 struct sockaddr_in *daddr = svc_daddr_in(rqstp);
517 static int svc_udp_get_dest_address6(struct svc_rqst *rqstp,
521 struct sockaddr_in6 *daddr = svc_daddr_in6(rqstp);
533 * Copy the UDP datagram's destination address to the rqstp structure.
539 static int svc_udp_get_dest_address(struct svc_rqst *rqstp,
544 return svc_udp_get_dest_address4(rqstp, cmh);
546 return svc_udp_get_dest_address6(rqstp, cmh);
554 * @rqstp: request structure into which to receive an RPC Call
562 static int svc_udp_recvfrom(struct svc_rqst *rqstp)
565 container_of(rqstp->rq_xprt, struct svc_sock, sk_xprt);
574 .msg_name = svc_addr(rqstp),
602 len = svc_addr_len(svc_addr(rqstp));
603 rqstp->rq_addrlen = len;
613 rqstp->rq_arg.len = len;
616 rqstp->rq_prot = IPPROTO_UDP;
618 if (!svc_udp_get_dest_address(rqstp, cmh))
620 rqstp->rq_daddrlen = svc_addr_len(svc_daddr(rqstp));
625 if (csum_partial_copy_to_xdr(&rqstp->rq_arg, skb))
631 rqstp->rq_arg.head[0].iov_base = skb->data;
632 rqstp->rq_arg.head[0].iov_len = len;
635 rqstp->rq_xprt_ctxt = skb;
638 rqstp->rq_arg.page_base = 0;
639 if (len <= rqstp->rq_arg.head[0].iov_len) {
640 rqstp->rq_arg.head[0].iov_len = len;
641 rqstp->rq_arg.page_len = 0;
642 rqstp->rq_respages = rqstp->rq_pages+1;
644 rqstp->rq_arg.page_len = len - rqstp->rq_arg.head[0].iov_len;
645 rqstp->rq_respages = rqstp->rq_pages + 1 +
646 DIV_ROUND_UP(rqstp->rq_arg.page_len, PAGE_SIZE);
648 rqstp->rq_next_page = rqstp->rq_respages+1;
653 svc_sock_secure_port(rqstp);
654 svc_xprt_received(rqstp->rq_xprt);
673 svc_xprt_received(rqstp->rq_xprt);
679 * @rqstp: completed svc_rqst
681 * xpt_mutex ensures @rqstp's whole message is written to the socket
686 static int svc_udp_sendto(struct svc_rqst *rqstp)
688 struct svc_xprt *xprt = rqstp->rq_xprt;
690 struct xdr_buf *xdr = &rqstp->rq_res;
697 .msg_name = &rqstp->rq_addr,
698 .msg_namelen = rqstp->rq_addrlen,
706 svc_udp_release_ctxt(xprt, rqstp->rq_xprt_ctxt);
707 rqstp->rq_xprt_ctxt = NULL;
709 svc_set_cmsg_data(rqstp, cmh);
716 count = xdr_buf_to_bvec(rqstp->rq_bvec,
717 ARRAY_SIZE(rqstp->rq_bvec), xdr);
719 iov_iter_bvec(&msg.msg_iter, ITER_SOURCE, rqstp->rq_bvec,
720 count, rqstp->rq_res.len);
724 iov_iter_bvec(&msg.msg_iter, ITER_SOURCE, rqstp->rq_bvec,
725 count, rqstp->rq_res.len);
949 struct svc_rqst *rqstp)
958 if (rqstp->rq_pages[i] != NULL)
959 put_page(rqstp->rq_pages[i]);
961 rqstp->rq_pages[i] = svsk->sk_pages[i];
964 rqstp->rq_arg.head[0].iov_base = page_address(rqstp->rq_pages[0]);
968 static void svc_tcp_save_pages(struct svc_sock *svsk, struct svc_rqst *rqstp)
977 svsk->sk_pages[i] = rqstp->rq_pages[i];
978 rqstp->rq_pages[i] = NULL;
1007 struct svc_rqst *rqstp)
1046 static int receive_cb_reply(struct svc_sock *svsk, struct svc_rqst *rqstp)
1051 __be32 *p = (__be32 *)rqstp->rq_arg.head[0].iov_base;
1068 src = &rqstp->rq_arg.head[0];
1072 xprt_complete_rqst(req->rq_task, rqstp->rq_arg.len);
1073 rqstp->rq_arg.len = 0;
1093 * @rqstp: request structure into which to receive an RPC Call
1099 * the next RPC message into @rqstp.
1109 static int svc_tcp_recvfrom(struct svc_rqst *rqstp)
1112 container_of(rqstp->rq_xprt, struct svc_sock, sk_xprt);
1120 len = svc_tcp_read_marker(svsk, rqstp);
1124 base = svc_tcp_restore_pages(svsk, rqstp);
1126 len = svc_tcp_read_msg(rqstp, base + want, base);
1137 rqstp->rq_arg.len = svsk->sk_datalen;
1138 rqstp->rq_arg.page_base = 0;
1139 if (rqstp->rq_arg.len <= rqstp->rq_arg.head[0].iov_len) {
1140 rqstp->rq_arg.head[0].iov_len = rqstp->rq_arg.len;
1141 rqstp->rq_arg.page_len = 0;
1143 rqstp->rq_arg.page_len = rqstp->rq_arg.len - rqstp->rq_arg.head[0].iov_len;
1145 rqstp->rq_xprt_ctxt = NULL;
1146 rqstp->rq_prot = IPPROTO_TCP;
1148 set_bit(RQ_LOCAL, &rqstp->rq_flags);
1150 clear_bit(RQ_LOCAL, &rqstp->rq_flags);
1152 p = (__be32 *)rqstp->rq_arg.head[0].iov_base;
1155 len = receive_cb_reply(svsk, rqstp);
1164 svc_xprt_copy_addrs(rqstp, &svsk->sk_xprt);
1168 svc_sock_secure_port(rqstp);
1169 svc_xprt_received(rqstp->rq_xprt);
1170 return rqstp->rq_arg.len;
1173 svc_tcp_save_pages(svsk, rqstp);
1201 svc_xprt_received(rqstp->rq_xprt);
1210 static int svc_tcp_sendmsg(struct svc_sock *svsk, struct svc_rqst *rqstp,
1230 bvec_set_virt(rqstp->rq_bvec, buf, sizeof(marker));
1232 count = xdr_buf_to_bvec(rqstp->rq_bvec + 1,
1233 ARRAY_SIZE(rqstp->rq_bvec) - 1, &rqstp->rq_res);
1235 iov_iter_bvec(&msg.msg_iter, ITER_SOURCE, rqstp->rq_bvec,
1236 1 + count, sizeof(marker) + rqstp->rq_res.len);
1247 * @rqstp: completed svc_rqst
1249 * xpt_mutex ensures @rqstp's whole message is written to the socket
1254 static int svc_tcp_sendto(struct svc_rqst *rqstp)
1256 struct svc_xprt *xprt = rqstp->rq_xprt;
1258 struct xdr_buf *xdr = &rqstp->rq_res;
1264 svc_tcp_release_ctxt(xprt, rqstp->rq_xprt_ctxt);
1265 rqstp->rq_xprt_ctxt = NULL;
1270 err = svc_tcp_sendmsg(svsk, rqstp, marker, &sent);