Lines Matching refs:rqstp
118 static void svc_release_skb(struct svc_rqst *rqstp) in svc_release_skb() argument
120 struct sk_buff *skb = rqstp->rq_xprt_ctxt; in svc_release_skb()
124 container_of(rqstp->rq_xprt, struct svc_sock, sk_xprt); in svc_release_skb()
125 rqstp->rq_xprt_ctxt = NULL; in svc_release_skb()
127 dprintk("svc: service %p, releasing skb %p\n", rqstp, skb); in svc_release_skb()
139 static void svc_set_cmsg_data(struct svc_rqst *rqstp, struct cmsghdr *cmh) in svc_set_cmsg_data() argument
142 container_of(rqstp->rq_xprt, struct svc_sock, sk_xprt); in svc_set_cmsg_data()
151 svc_daddr_in(rqstp)->sin_addr.s_addr; in svc_set_cmsg_data()
158 struct sockaddr_in6 *daddr = svc_daddr_in6(rqstp); in svc_set_cmsg_data()
232 static int svc_sendto(struct svc_rqst *rqstp, struct xdr_buf *xdr) in svc_sendto() argument
235 container_of(rqstp->rq_xprt, struct svc_sock, sk_xprt); in svc_sendto()
247 if (rqstp->rq_prot == IPPROTO_UDP) { in svc_sendto()
249 .msg_name = &rqstp->rq_addr, in svc_sendto()
250 .msg_namelen = rqstp->rq_addrlen, in svc_sendto()
256 svc_set_cmsg_data(rqstp, cmh); in svc_sendto()
264 len = svc_send_common(sock, xdr, rqstp->rq_respages[0], headoff, in svc_sendto()
265 rqstp->rq_respages[0], tailoff); in svc_sendto()
270 xdr->len, len, svc_print_addr(rqstp, buf, sizeof(buf))); in svc_sendto()
315 static int svc_recvfrom(struct svc_rqst *rqstp, struct kvec *iov, int nr, in svc_recvfrom() argument
319 container_of(rqstp->rq_xprt, struct svc_sock, sk_xprt); in svc_recvfrom()
325 rqstp->rq_xprt_hlen = 0; in svc_recvfrom()
341 static int svc_partial_recvfrom(struct svc_rqst *rqstp, in svc_partial_recvfrom() argument
351 return svc_recvfrom(rqstp, iov, nr, buflen); in svc_partial_recvfrom()
362 ret = svc_recvfrom(rqstp, &iov[i], nr - i, buflen); in svc_partial_recvfrom()
395 static int svc_sock_secure_port(struct svc_rqst *rqstp) in svc_sock_secure_port() argument
397 return svc_port_is_privileged(svc_addr(rqstp)); in svc_sock_secure_port()
465 static int svc_udp_get_dest_address4(struct svc_rqst *rqstp, in svc_udp_get_dest_address4() argument
469 struct sockaddr_in *daddr = svc_daddr_in(rqstp); in svc_udp_get_dest_address4()
482 static int svc_udp_get_dest_address6(struct svc_rqst *rqstp, in svc_udp_get_dest_address6() argument
486 struct sockaddr_in6 *daddr = svc_daddr_in6(rqstp); in svc_udp_get_dest_address6()
504 static int svc_udp_get_dest_address(struct svc_rqst *rqstp, in svc_udp_get_dest_address() argument
509 return svc_udp_get_dest_address4(rqstp, cmh); in svc_udp_get_dest_address()
511 return svc_udp_get_dest_address6(rqstp, cmh); in svc_udp_get_dest_address()
520 static int svc_udp_recvfrom(struct svc_rqst *rqstp) in svc_udp_recvfrom() argument
523 container_of(rqstp->rq_xprt, struct svc_sock, sk_xprt); in svc_udp_recvfrom()
532 .msg_name = svc_addr(rqstp), in svc_udp_recvfrom()
568 len = svc_addr_len(svc_addr(rqstp)); in svc_udp_recvfrom()
569 rqstp->rq_addrlen = len; in svc_udp_recvfrom()
579 rqstp->rq_arg.len = len; in svc_udp_recvfrom()
581 rqstp->rq_prot = IPPROTO_UDP; in svc_udp_recvfrom()
583 if (!svc_udp_get_dest_address(rqstp, cmh)) { in svc_udp_recvfrom()
588 rqstp->rq_daddrlen = svc_addr_len(svc_daddr(rqstp)); in svc_udp_recvfrom()
593 if (csum_partial_copy_to_xdr(&rqstp->rq_arg, skb)) { in svc_udp_recvfrom()
602 rqstp->rq_arg.head[0].iov_base = skb->data; in svc_udp_recvfrom()
603 rqstp->rq_arg.head[0].iov_len = len; in svc_udp_recvfrom()
606 rqstp->rq_xprt_ctxt = skb; in svc_udp_recvfrom()
609 rqstp->rq_arg.page_base = 0; in svc_udp_recvfrom()
610 if (len <= rqstp->rq_arg.head[0].iov_len) { in svc_udp_recvfrom()
611 rqstp->rq_arg.head[0].iov_len = len; in svc_udp_recvfrom()
612 rqstp->rq_arg.page_len = 0; in svc_udp_recvfrom()
613 rqstp->rq_respages = rqstp->rq_pages+1; in svc_udp_recvfrom()
615 rqstp->rq_arg.page_len = len - rqstp->rq_arg.head[0].iov_len; in svc_udp_recvfrom()
616 rqstp->rq_respages = rqstp->rq_pages + 1 + in svc_udp_recvfrom()
617 DIV_ROUND_UP(rqstp->rq_arg.page_len, PAGE_SIZE); in svc_udp_recvfrom()
619 rqstp->rq_next_page = rqstp->rq_respages+1; in svc_udp_recvfrom()
632 svc_udp_sendto(struct svc_rqst *rqstp) in svc_udp_sendto() argument
636 error = svc_sendto(rqstp, &rqstp->rq_res); in svc_udp_sendto()
639 error = svc_sendto(rqstp, &rqstp->rq_res); in svc_udp_sendto()
644 static void svc_udp_prep_reply_hdr(struct svc_rqst *rqstp) in svc_udp_prep_reply_hdr() argument
892 static unsigned int svc_tcp_restore_pages(struct svc_sock *svsk, struct svc_rqst *rqstp) in svc_tcp_restore_pages() argument
901 if (rqstp->rq_pages[i] != NULL) in svc_tcp_restore_pages()
902 put_page(rqstp->rq_pages[i]); in svc_tcp_restore_pages()
904 rqstp->rq_pages[i] = svsk->sk_pages[i]; in svc_tcp_restore_pages()
907 rqstp->rq_arg.head[0].iov_base = page_address(rqstp->rq_pages[0]); in svc_tcp_restore_pages()
911 static void svc_tcp_save_pages(struct svc_sock *svsk, struct svc_rqst *rqstp) in svc_tcp_save_pages() argument
920 svsk->sk_pages[i] = rqstp->rq_pages[i]; in svc_tcp_save_pages()
921 rqstp->rq_pages[i] = NULL; in svc_tcp_save_pages()
950 static int svc_tcp_recv_record(struct svc_sock *svsk, struct svc_rqst *rqstp) in svc_tcp_recv_record() argument
962 if ((len = svc_recvfrom(rqstp, &iov, 1, want)) < 0) in svc_tcp_recv_record()
990 static int receive_cb_reply(struct svc_sock *svsk, struct svc_rqst *rqstp) in receive_cb_reply() argument
995 __be32 *p = (__be32 *)rqstp->rq_arg.head[0].iov_base; in receive_cb_reply()
1016 src = &rqstp->rq_arg.head[0]; in receive_cb_reply()
1020 xprt_complete_rqst(req->rq_task, rqstp->rq_arg.len); in receive_cb_reply()
1021 rqstp->rq_arg.len = 0; in receive_cb_reply()
1062 static int svc_tcp_recvfrom(struct svc_rqst *rqstp) in svc_tcp_recvfrom() argument
1065 container_of(rqstp->rq_xprt, struct svc_sock, sk_xprt); in svc_tcp_recvfrom()
1079 len = svc_tcp_recv_record(svsk, rqstp); in svc_tcp_recvfrom()
1083 base = svc_tcp_restore_pages(svsk, rqstp); in svc_tcp_recvfrom()
1086 vec = rqstp->rq_vec; in svc_tcp_recvfrom()
1088 pnum = copy_pages_to_kvecs(&vec[0], &rqstp->rq_pages[0], in svc_tcp_recvfrom()
1091 rqstp->rq_respages = &rqstp->rq_pages[pnum]; in svc_tcp_recvfrom()
1092 rqstp->rq_next_page = rqstp->rq_respages + 1; in svc_tcp_recvfrom()
1095 len = svc_partial_recvfrom(rqstp, vec, pnum, want, base); in svc_tcp_recvfrom()
1101 svc_tcp_save_pages(svsk, rqstp); in svc_tcp_recvfrom()
1118 rqstp->rq_arg.len = svsk->sk_datalen; in svc_tcp_recvfrom()
1119 rqstp->rq_arg.page_base = 0; in svc_tcp_recvfrom()
1120 if (rqstp->rq_arg.len <= rqstp->rq_arg.head[0].iov_len) { in svc_tcp_recvfrom()
1121 rqstp->rq_arg.head[0].iov_len = rqstp->rq_arg.len; in svc_tcp_recvfrom()
1122 rqstp->rq_arg.page_len = 0; in svc_tcp_recvfrom()
1124 rqstp->rq_arg.page_len = rqstp->rq_arg.len - rqstp->rq_arg.head[0].iov_len; in svc_tcp_recvfrom()
1126 rqstp->rq_xprt_ctxt = NULL; in svc_tcp_recvfrom()
1127 rqstp->rq_prot = IPPROTO_TCP; in svc_tcp_recvfrom()
1129 set_bit(RQ_LOCAL, &rqstp->rq_flags); in svc_tcp_recvfrom()
1131 clear_bit(RQ_LOCAL, &rqstp->rq_flags); in svc_tcp_recvfrom()
1133 p = (__be32 *)rqstp->rq_arg.head[0].iov_base; in svc_tcp_recvfrom()
1136 len = receive_cb_reply(svsk, rqstp); in svc_tcp_recvfrom()
1145 svc_xprt_copy_addrs(rqstp, &svsk->sk_xprt); in svc_tcp_recvfrom()
1149 return rqstp->rq_arg.len; in svc_tcp_recvfrom()
1167 static int svc_tcp_sendto(struct svc_rqst *rqstp) in svc_tcp_sendto() argument
1169 struct xdr_buf *xbufp = &rqstp->rq_res; in svc_tcp_sendto()
1180 sent = svc_sendto(rqstp, &rqstp->rq_res); in svc_tcp_sendto()
1185 rqstp->rq_xprt->xpt_server->sv_name, in svc_tcp_sendto()
1188 set_bit(XPT_CLOSE, &rqstp->rq_xprt->xpt_flags); in svc_tcp_sendto()
1189 svc_xprt_enqueue(rqstp->rq_xprt); in svc_tcp_sendto()
1198 static void svc_tcp_prep_reply_hdr(struct svc_rqst *rqstp) in svc_tcp_prep_reply_hdr() argument
1200 struct kvec *resv = &rqstp->rq_res.head[0]; in svc_tcp_prep_reply_hdr()