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()
507 static int svc_udp_get_dest_address4(struct svc_rqst *rqstp, in svc_udp_get_dest_address4() argument
511 struct sockaddr_in *daddr = svc_daddr_in(rqstp); in svc_udp_get_dest_address4()
524 static int svc_udp_get_dest_address6(struct svc_rqst *rqstp, in svc_udp_get_dest_address6() argument
528 struct sockaddr_in6 *daddr = svc_daddr_in6(rqstp); in svc_udp_get_dest_address6()
546 static int svc_udp_get_dest_address(struct svc_rqst *rqstp, in svc_udp_get_dest_address() argument
551 return svc_udp_get_dest_address4(rqstp, cmh); in svc_udp_get_dest_address()
553 return svc_udp_get_dest_address6(rqstp, cmh); in svc_udp_get_dest_address()
562 static int svc_udp_recvfrom(struct svc_rqst *rqstp) in svc_udp_recvfrom() argument
565 container_of(rqstp->rq_xprt, struct svc_sock, sk_xprt); in svc_udp_recvfrom()
574 .msg_name = svc_addr(rqstp), in svc_udp_recvfrom()
610 len = svc_addr_len(svc_addr(rqstp)); in svc_udp_recvfrom()
611 rqstp->rq_addrlen = len; in svc_udp_recvfrom()
621 rqstp->rq_arg.len = len; in svc_udp_recvfrom()
623 rqstp->rq_prot = IPPROTO_UDP; in svc_udp_recvfrom()
625 if (!svc_udp_get_dest_address(rqstp, cmh)) { in svc_udp_recvfrom()
630 rqstp->rq_daddrlen = svc_addr_len(svc_daddr(rqstp)); in svc_udp_recvfrom()
635 if (csum_partial_copy_to_xdr(&rqstp->rq_arg, skb)) { in svc_udp_recvfrom()
644 rqstp->rq_arg.head[0].iov_base = skb->data + in svc_udp_recvfrom()
646 rqstp->rq_arg.head[0].iov_len = len; in svc_udp_recvfrom()
649 rqstp->rq_xprt_ctxt = skb; in svc_udp_recvfrom()
652 rqstp->rq_arg.page_base = 0; in svc_udp_recvfrom()
653 if (len <= rqstp->rq_arg.head[0].iov_len) { in svc_udp_recvfrom()
654 rqstp->rq_arg.head[0].iov_len = len; in svc_udp_recvfrom()
655 rqstp->rq_arg.page_len = 0; in svc_udp_recvfrom()
656 rqstp->rq_respages = rqstp->rq_pages+1; in svc_udp_recvfrom()
658 rqstp->rq_arg.page_len = len - rqstp->rq_arg.head[0].iov_len; in svc_udp_recvfrom()
659 rqstp->rq_respages = rqstp->rq_pages + 1 + in svc_udp_recvfrom()
660 DIV_ROUND_UP(rqstp->rq_arg.page_len, PAGE_SIZE); in svc_udp_recvfrom()
662 rqstp->rq_next_page = rqstp->rq_respages+1; in svc_udp_recvfrom()
675 svc_udp_sendto(struct svc_rqst *rqstp) in svc_udp_sendto() argument
679 error = svc_sendto(rqstp, &rqstp->rq_res); in svc_udp_sendto()
682 error = svc_sendto(rqstp, &rqstp->rq_res); in svc_udp_sendto()
687 static void svc_udp_prep_reply_hdr(struct svc_rqst *rqstp) in svc_udp_prep_reply_hdr() argument
937 static unsigned int svc_tcp_restore_pages(struct svc_sock *svsk, struct svc_rqst *rqstp) in svc_tcp_restore_pages() argument
946 if (rqstp->rq_pages[i] != NULL) in svc_tcp_restore_pages()
947 put_page(rqstp->rq_pages[i]); in svc_tcp_restore_pages()
949 rqstp->rq_pages[i] = svsk->sk_pages[i]; in svc_tcp_restore_pages()
952 rqstp->rq_arg.head[0].iov_base = page_address(rqstp->rq_pages[0]); in svc_tcp_restore_pages()
956 static void svc_tcp_save_pages(struct svc_sock *svsk, struct svc_rqst *rqstp) in svc_tcp_save_pages() argument
965 svsk->sk_pages[i] = rqstp->rq_pages[i]; in svc_tcp_save_pages()
966 rqstp->rq_pages[i] = NULL; in svc_tcp_save_pages()
995 static int svc_tcp_recv_record(struct svc_sock *svsk, struct svc_rqst *rqstp) in svc_tcp_recv_record() argument
1007 if ((len = svc_recvfrom(rqstp, &iov, 1, want)) < 0) in svc_tcp_recv_record()
1035 static int receive_cb_reply(struct svc_sock *svsk, struct svc_rqst *rqstp) in receive_cb_reply() argument
1040 __be32 *p = (__be32 *)rqstp->rq_arg.head[0].iov_base; in receive_cb_reply()
1061 src = &rqstp->rq_arg.head[0]; in receive_cb_reply()
1065 xprt_complete_rqst(req->rq_task, rqstp->rq_arg.len); in receive_cb_reply()
1066 rqstp->rq_arg.len = 0; in receive_cb_reply()
1107 static int svc_tcp_recvfrom(struct svc_rqst *rqstp) in svc_tcp_recvfrom() argument
1110 container_of(rqstp->rq_xprt, struct svc_sock, sk_xprt); in svc_tcp_recvfrom()
1124 len = svc_tcp_recv_record(svsk, rqstp); in svc_tcp_recvfrom()
1128 base = svc_tcp_restore_pages(svsk, rqstp); in svc_tcp_recvfrom()
1131 vec = rqstp->rq_vec; in svc_tcp_recvfrom()
1133 pnum = copy_pages_to_kvecs(&vec[0], &rqstp->rq_pages[0], in svc_tcp_recvfrom()
1136 rqstp->rq_respages = &rqstp->rq_pages[pnum]; in svc_tcp_recvfrom()
1137 rqstp->rq_next_page = rqstp->rq_respages + 1; in svc_tcp_recvfrom()
1140 len = svc_partial_recvfrom(rqstp, vec, pnum, want, base); in svc_tcp_recvfrom()
1146 svc_tcp_save_pages(svsk, rqstp); in svc_tcp_recvfrom()
1163 rqstp->rq_arg.len = svsk->sk_datalen; in svc_tcp_recvfrom()
1164 rqstp->rq_arg.page_base = 0; in svc_tcp_recvfrom()
1165 if (rqstp->rq_arg.len <= rqstp->rq_arg.head[0].iov_len) { in svc_tcp_recvfrom()
1166 rqstp->rq_arg.head[0].iov_len = rqstp->rq_arg.len; in svc_tcp_recvfrom()
1167 rqstp->rq_arg.page_len = 0; in svc_tcp_recvfrom()
1169 rqstp->rq_arg.page_len = rqstp->rq_arg.len - rqstp->rq_arg.head[0].iov_len; in svc_tcp_recvfrom()
1171 rqstp->rq_xprt_ctxt = NULL; in svc_tcp_recvfrom()
1172 rqstp->rq_prot = IPPROTO_TCP; in svc_tcp_recvfrom()
1174 set_bit(RQ_LOCAL, &rqstp->rq_flags); in svc_tcp_recvfrom()
1176 clear_bit(RQ_LOCAL, &rqstp->rq_flags); in svc_tcp_recvfrom()
1178 p = (__be32 *)rqstp->rq_arg.head[0].iov_base; in svc_tcp_recvfrom()
1181 len = receive_cb_reply(svsk, rqstp); in svc_tcp_recvfrom()
1190 svc_xprt_copy_addrs(rqstp, &svsk->sk_xprt); in svc_tcp_recvfrom()
1194 return rqstp->rq_arg.len; in svc_tcp_recvfrom()
1212 static int svc_tcp_sendto(struct svc_rqst *rqstp) in svc_tcp_sendto() argument
1214 struct xdr_buf *xbufp = &rqstp->rq_res; in svc_tcp_sendto()
1225 sent = svc_sendto(rqstp, &rqstp->rq_res); in svc_tcp_sendto()
1230 rqstp->rq_xprt->xpt_server->sv_name, in svc_tcp_sendto()
1233 set_bit(XPT_CLOSE, &rqstp->rq_xprt->xpt_flags); in svc_tcp_sendto()
1234 svc_xprt_enqueue(rqstp->rq_xprt); in svc_tcp_sendto()
1243 static void svc_tcp_prep_reply_hdr(struct svc_rqst *rqstp) in svc_tcp_prep_reply_hdr() argument
1245 struct kvec *resv = &rqstp->rq_res.head[0]; in svc_tcp_prep_reply_hdr()