Lines Matching refs:rqstp
120 static void svc_release_skb(struct svc_rqst *rqstp) in svc_release_skb() argument
122 struct sk_buff *skb = rqstp->rq_xprt_ctxt; in svc_release_skb()
126 container_of(rqstp->rq_xprt, struct svc_sock, sk_xprt); in svc_release_skb()
127 rqstp->rq_xprt_ctxt = NULL; in svc_release_skb()
129 dprintk("svc: service %p, releasing skb %p\n", rqstp, skb); in svc_release_skb()
141 static void svc_set_cmsg_data(struct svc_rqst *rqstp, struct cmsghdr *cmh) in svc_set_cmsg_data() argument
144 container_of(rqstp->rq_xprt, struct svc_sock, sk_xprt); in svc_set_cmsg_data()
153 svc_daddr_in(rqstp)->sin_addr.s_addr; in svc_set_cmsg_data()
160 struct sockaddr_in6 *daddr = svc_daddr_in6(rqstp); in svc_set_cmsg_data()
234 static int svc_sendto(struct svc_rqst *rqstp, struct xdr_buf *xdr) in svc_sendto() argument
237 container_of(rqstp->rq_xprt, struct svc_sock, sk_xprt); in svc_sendto()
249 if (rqstp->rq_prot == IPPROTO_UDP) { in svc_sendto()
251 .msg_name = &rqstp->rq_addr, in svc_sendto()
252 .msg_namelen = rqstp->rq_addrlen, in svc_sendto()
258 svc_set_cmsg_data(rqstp, cmh); in svc_sendto()
266 len = svc_send_common(sock, xdr, rqstp->rq_respages[0], headoff, in svc_sendto()
267 rqstp->rq_respages[0], tailoff); in svc_sendto()
272 xdr->len, len, svc_print_addr(rqstp, buf, sizeof(buf))); in svc_sendto()
317 static int svc_recvfrom(struct svc_rqst *rqstp, struct kvec *iov, int nr, in svc_recvfrom() argument
321 container_of(rqstp->rq_xprt, struct svc_sock, sk_xprt); in svc_recvfrom()
327 rqstp->rq_xprt_hlen = 0; in svc_recvfrom()
343 static int svc_partial_recvfrom(struct svc_rqst *rqstp, in svc_partial_recvfrom() argument
353 return svc_recvfrom(rqstp, iov, nr, buflen); in svc_partial_recvfrom()
364 ret = svc_recvfrom(rqstp, &iov[i], nr - i, buflen); in svc_partial_recvfrom()
397 static int svc_sock_secure_port(struct svc_rqst *rqstp) in svc_sock_secure_port() argument
399 return svc_port_is_privileged(svc_addr(rqstp)); in svc_sock_secure_port()
482 static int svc_udp_get_dest_address4(struct svc_rqst *rqstp, in svc_udp_get_dest_address4() argument
486 struct sockaddr_in *daddr = svc_daddr_in(rqstp); in svc_udp_get_dest_address4()
499 static int svc_udp_get_dest_address6(struct svc_rqst *rqstp, in svc_udp_get_dest_address6() argument
503 struct sockaddr_in6 *daddr = svc_daddr_in6(rqstp); in svc_udp_get_dest_address6()
521 static int svc_udp_get_dest_address(struct svc_rqst *rqstp, in svc_udp_get_dest_address() argument
526 return svc_udp_get_dest_address4(rqstp, cmh); in svc_udp_get_dest_address()
528 return svc_udp_get_dest_address6(rqstp, cmh); in svc_udp_get_dest_address()
537 static int svc_udp_recvfrom(struct svc_rqst *rqstp) in svc_udp_recvfrom() argument
540 container_of(rqstp->rq_xprt, struct svc_sock, sk_xprt); in svc_udp_recvfrom()
549 .msg_name = svc_addr(rqstp), in svc_udp_recvfrom()
585 len = svc_addr_len(svc_addr(rqstp)); in svc_udp_recvfrom()
586 rqstp->rq_addrlen = len; in svc_udp_recvfrom()
596 rqstp->rq_arg.len = len; in svc_udp_recvfrom()
598 rqstp->rq_prot = IPPROTO_UDP; in svc_udp_recvfrom()
600 if (!svc_udp_get_dest_address(rqstp, cmh)) { in svc_udp_recvfrom()
605 rqstp->rq_daddrlen = svc_addr_len(svc_daddr(rqstp)); in svc_udp_recvfrom()
610 if (csum_partial_copy_to_xdr(&rqstp->rq_arg, skb)) { in svc_udp_recvfrom()
619 rqstp->rq_arg.head[0].iov_base = skb->data + in svc_udp_recvfrom()
621 rqstp->rq_arg.head[0].iov_len = len; in svc_udp_recvfrom()
624 rqstp->rq_xprt_ctxt = skb; in svc_udp_recvfrom()
627 rqstp->rq_arg.page_base = 0; in svc_udp_recvfrom()
628 if (len <= rqstp->rq_arg.head[0].iov_len) { in svc_udp_recvfrom()
629 rqstp->rq_arg.head[0].iov_len = len; in svc_udp_recvfrom()
630 rqstp->rq_arg.page_len = 0; in svc_udp_recvfrom()
631 rqstp->rq_respages = rqstp->rq_pages+1; in svc_udp_recvfrom()
633 rqstp->rq_arg.page_len = len - rqstp->rq_arg.head[0].iov_len; in svc_udp_recvfrom()
634 rqstp->rq_respages = rqstp->rq_pages + 1 + in svc_udp_recvfrom()
635 DIV_ROUND_UP(rqstp->rq_arg.page_len, PAGE_SIZE); in svc_udp_recvfrom()
637 rqstp->rq_next_page = rqstp->rq_respages+1; in svc_udp_recvfrom()
650 svc_udp_sendto(struct svc_rqst *rqstp) in svc_udp_sendto() argument
654 error = svc_sendto(rqstp, &rqstp->rq_res); in svc_udp_sendto()
657 error = svc_sendto(rqstp, &rqstp->rq_res); in svc_udp_sendto()
662 static void svc_udp_prep_reply_hdr(struct svc_rqst *rqstp) in svc_udp_prep_reply_hdr() argument
912 static unsigned int svc_tcp_restore_pages(struct svc_sock *svsk, struct svc_rqst *rqstp) in svc_tcp_restore_pages() argument
921 if (rqstp->rq_pages[i] != NULL) in svc_tcp_restore_pages()
922 put_page(rqstp->rq_pages[i]); in svc_tcp_restore_pages()
924 rqstp->rq_pages[i] = svsk->sk_pages[i]; in svc_tcp_restore_pages()
927 rqstp->rq_arg.head[0].iov_base = page_address(rqstp->rq_pages[0]); in svc_tcp_restore_pages()
931 static void svc_tcp_save_pages(struct svc_sock *svsk, struct svc_rqst *rqstp) in svc_tcp_save_pages() argument
940 svsk->sk_pages[i] = rqstp->rq_pages[i]; in svc_tcp_save_pages()
941 rqstp->rq_pages[i] = NULL; in svc_tcp_save_pages()
970 static int svc_tcp_recv_record(struct svc_sock *svsk, struct svc_rqst *rqstp) in svc_tcp_recv_record() argument
982 if ((len = svc_recvfrom(rqstp, &iov, 1, want)) < 0) in svc_tcp_recv_record()
1010 static int receive_cb_reply(struct svc_sock *svsk, struct svc_rqst *rqstp) in receive_cb_reply() argument
1015 __be32 *p = (__be32 *)rqstp->rq_arg.head[0].iov_base; in receive_cb_reply()
1036 src = &rqstp->rq_arg.head[0]; in receive_cb_reply()
1040 xprt_complete_rqst(req->rq_task, rqstp->rq_arg.len); in receive_cb_reply()
1041 rqstp->rq_arg.len = 0; in receive_cb_reply()
1082 static int svc_tcp_recvfrom(struct svc_rqst *rqstp) in svc_tcp_recvfrom() argument
1085 container_of(rqstp->rq_xprt, struct svc_sock, sk_xprt); in svc_tcp_recvfrom()
1099 len = svc_tcp_recv_record(svsk, rqstp); in svc_tcp_recvfrom()
1103 base = svc_tcp_restore_pages(svsk, rqstp); in svc_tcp_recvfrom()
1106 vec = rqstp->rq_vec; in svc_tcp_recvfrom()
1108 pnum = copy_pages_to_kvecs(&vec[0], &rqstp->rq_pages[0], in svc_tcp_recvfrom()
1111 rqstp->rq_respages = &rqstp->rq_pages[pnum]; in svc_tcp_recvfrom()
1112 rqstp->rq_next_page = rqstp->rq_respages + 1; in svc_tcp_recvfrom()
1115 len = svc_partial_recvfrom(rqstp, vec, pnum, want, base); in svc_tcp_recvfrom()
1121 svc_tcp_save_pages(svsk, rqstp); in svc_tcp_recvfrom()
1138 rqstp->rq_arg.len = svsk->sk_datalen; in svc_tcp_recvfrom()
1139 rqstp->rq_arg.page_base = 0; in svc_tcp_recvfrom()
1140 if (rqstp->rq_arg.len <= rqstp->rq_arg.head[0].iov_len) { in svc_tcp_recvfrom()
1141 rqstp->rq_arg.head[0].iov_len = rqstp->rq_arg.len; in svc_tcp_recvfrom()
1142 rqstp->rq_arg.page_len = 0; in svc_tcp_recvfrom()
1144 rqstp->rq_arg.page_len = rqstp->rq_arg.len - rqstp->rq_arg.head[0].iov_len; in svc_tcp_recvfrom()
1146 rqstp->rq_xprt_ctxt = NULL; in svc_tcp_recvfrom()
1147 rqstp->rq_prot = IPPROTO_TCP; in svc_tcp_recvfrom()
1149 set_bit(RQ_LOCAL, &rqstp->rq_flags); in svc_tcp_recvfrom()
1151 clear_bit(RQ_LOCAL, &rqstp->rq_flags); in svc_tcp_recvfrom()
1153 p = (__be32 *)rqstp->rq_arg.head[0].iov_base; in svc_tcp_recvfrom()
1156 len = receive_cb_reply(svsk, rqstp); in svc_tcp_recvfrom()
1165 svc_xprt_copy_addrs(rqstp, &svsk->sk_xprt); in svc_tcp_recvfrom()
1169 return rqstp->rq_arg.len; in svc_tcp_recvfrom()
1187 static int svc_tcp_sendto(struct svc_rqst *rqstp) in svc_tcp_sendto() argument
1189 struct xdr_buf *xbufp = &rqstp->rq_res; in svc_tcp_sendto()
1200 sent = svc_sendto(rqstp, &rqstp->rq_res); in svc_tcp_sendto()
1205 rqstp->rq_xprt->xpt_server->sv_name, in svc_tcp_sendto()
1208 set_bit(XPT_CLOSE, &rqstp->rq_xprt->xpt_flags); in svc_tcp_sendto()
1209 svc_xprt_enqueue(rqstp->rq_xprt); in svc_tcp_sendto()
1218 static void svc_tcp_prep_reply_hdr(struct svc_rqst *rqstp) in svc_tcp_prep_reply_hdr() argument
1220 struct kvec *resv = &rqstp->rq_res.head[0]; in svc_tcp_prep_reply_hdr()