Lines Matching refs:svsk
125 struct svc_sock *svsk = in svc_release_skb() local
130 skb_free_datagram_locked(svsk->sk_sk, skb); in svc_release_skb()
143 struct svc_sock *svsk = in svc_set_cmsg_data() local
145 switch (svsk->sk_sk->sk_family) { in svc_set_cmsg_data()
236 struct svc_sock *svsk = in svc_sendto() local
238 struct socket *sock = svsk->sk_sock; in svc_sendto()
271 svsk, xdr->head[0].iov_base, xdr->head[0].iov_len, in svc_sendto()
280 static int svc_one_sock_name(struct svc_sock *svsk, char *buf, int remaining) in svc_one_sock_name() argument
282 const struct sock *sk = svsk->sk_sk; in svc_one_sock_name()
320 struct svc_sock *svsk = in svc_recvfrom() local
329 clear_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags); in svc_recvfrom()
330 len = kernel_recvmsg(svsk->sk_sock, &msg, iov, nr, buflen, in svc_recvfrom()
336 set_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags); in svc_recvfrom()
339 svsk, iov[0].iov_base, iov[0].iov_len, len); in svc_recvfrom()
432 struct svc_sock *svsk = (struct svc_sock *)sk->sk_user_data; in svc_udp_data_ready() local
435 if (svsk) { in svc_udp_data_ready()
437 svsk, sk, in svc_udp_data_ready()
438 test_bit(XPT_BUSY, &svsk->sk_xprt.xpt_flags)); in svc_udp_data_ready()
439 set_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags); in svc_udp_data_ready()
440 svc_xprt_enqueue(&svsk->sk_xprt); in svc_udp_data_ready()
451 struct svc_sock *svsk = (struct svc_sock *)(sk->sk_user_data); in svc_write_space() local
454 if (svsk) { in svc_write_space()
456 svsk, sk, test_bit(XPT_BUSY, &svsk->sk_xprt.xpt_flags)); in svc_write_space()
457 svc_xprt_enqueue(&svsk->sk_xprt); in svc_write_space()
462 svsk); in svc_write_space()
469 struct svc_sock *svsk = container_of(xprt, struct svc_sock, sk_xprt); in svc_tcp_has_wspace() local
470 struct svc_serv *serv = svsk->sk_xprt.xpt_server; in svc_tcp_has_wspace()
476 if (sk_stream_wspace(svsk->sk_sk) >= required || in svc_tcp_has_wspace()
477 (sk_stream_min_wspace(svsk->sk_sk) == 0 && in svc_tcp_has_wspace()
480 set_bit(SOCK_NOSPACE, &svsk->sk_sock->flags); in svc_tcp_has_wspace()
486 struct svc_sock *svsk = (struct svc_sock *)(sk->sk_user_data); in svc_tcp_write_space() local
491 if (!svsk || svc_tcp_has_wspace(&svsk->sk_xprt)) in svc_tcp_write_space()
498 struct svc_sock *svsk = container_of(xprt, struct svc_sock, sk_xprt); in svc_tcp_adjust_wspace() local
501 clear_bit(SOCK_NOSPACE, &svsk->sk_sock->flags); in svc_tcp_adjust_wspace()
564 struct svc_sock *svsk = in svc_udp_recvfrom() local
566 struct svc_serv *serv = svsk->sk_xprt.xpt_server; in svc_udp_recvfrom()
582 if (test_and_clear_bit(XPT_CHNGBUF, &svsk->sk_xprt.xpt_flags)) in svc_udp_recvfrom()
591 svc_sock_setbufsize(svsk->sk_sock, in svc_udp_recvfrom()
595 clear_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags); in svc_udp_recvfrom()
597 err = kernel_recvmsg(svsk->sk_sock, &msg, NULL, in svc_udp_recvfrom()
600 skb = skb_recv_datagram(svsk->sk_sk, 0, 1, &err); in svc_udp_recvfrom()
606 set_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags); in svc_udp_recvfrom()
617 svsk->sk_sk->sk_stamp = skb->tstamp; in svc_udp_recvfrom()
618 set_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags); /* there may be more data... */ in svc_udp_recvfrom()
641 skb_free_datagram_locked(svsk->sk_sk, skb); in svc_udp_recvfrom()
670 skb_free_datagram_locked(svsk->sk_sk, skb); in svc_udp_recvfrom()
693 struct svc_sock *svsk = container_of(xprt, struct svc_sock, sk_xprt); in svc_udp_has_wspace() local
701 set_bit(SOCK_NOSPACE, &svsk->sk_sock->flags); in svc_udp_has_wspace()
702 required = atomic_read(&svsk->sk_xprt.xpt_reserved) + serv->sv_max_mesg; in svc_udp_has_wspace()
703 if (required*2 > sock_wspace(svsk->sk_sk)) in svc_udp_has_wspace()
705 clear_bit(SOCK_NOSPACE, &svsk->sk_sock->flags); in svc_udp_has_wspace()
744 static void svc_udp_init(struct svc_sock *svsk, struct svc_serv *serv) in svc_udp_init() argument
748 svc_xprt_init(sock_net(svsk->sk_sock->sk), &svc_udp_class, in svc_udp_init()
749 &svsk->sk_xprt, serv); in svc_udp_init()
750 clear_bit(XPT_CACHE_AUTH, &svsk->sk_xprt.xpt_flags); in svc_udp_init()
751 svsk->sk_sk->sk_data_ready = svc_udp_data_ready; in svc_udp_init()
752 svsk->sk_sk->sk_write_space = svc_write_space; in svc_udp_init()
758 svc_sock_setbufsize(svsk->sk_sock, in svc_udp_init()
759 3 * svsk->sk_xprt.xpt_server->sv_max_mesg, in svc_udp_init()
760 3 * svsk->sk_xprt.xpt_server->sv_max_mesg); in svc_udp_init()
763 set_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags); in svc_udp_init()
764 set_bit(XPT_CHNGBUF, &svsk->sk_xprt.xpt_flags); in svc_udp_init()
767 switch (svsk->sk_sk->sk_family) { in svc_udp_init()
779 err = kernel_setsockopt(svsk->sk_sock, level, optname, in svc_udp_init()
790 struct svc_sock *svsk = (struct svc_sock *)sk->sk_user_data; in svc_tcp_listen_data_ready() local
807 if (svsk) { in svc_tcp_listen_data_ready()
808 set_bit(XPT_CONN, &svsk->sk_xprt.xpt_flags); in svc_tcp_listen_data_ready()
809 svc_xprt_enqueue(&svsk->sk_xprt); in svc_tcp_listen_data_ready()
824 struct svc_sock *svsk = (struct svc_sock *)sk->sk_user_data; in svc_tcp_state_change() local
830 if (!svsk) in svc_tcp_state_change()
833 set_bit(XPT_CLOSE, &svsk->sk_xprt.xpt_flags); in svc_tcp_state_change()
834 svc_xprt_enqueue(&svsk->sk_xprt); in svc_tcp_state_change()
842 struct svc_sock *svsk = (struct svc_sock *)sk->sk_user_data; in svc_tcp_data_ready() local
847 if (svsk) { in svc_tcp_data_ready()
848 set_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags); in svc_tcp_data_ready()
849 svc_xprt_enqueue(&svsk->sk_xprt); in svc_tcp_data_ready()
860 struct svc_sock *svsk = container_of(xprt, struct svc_sock, sk_xprt); in svc_tcp_accept() local
863 struct svc_serv *serv = svsk->sk_xprt.xpt_server; in svc_tcp_accept()
864 struct socket *sock = svsk->sk_sock; in svc_tcp_accept()
870 dprintk("svc: tcp_accept %p sock %p\n", svsk, sock); in svc_tcp_accept()
874 clear_bit(XPT_CONN, &svsk->sk_xprt.xpt_flags); in svc_tcp_accept()
885 set_bit(XPT_CONN, &svsk->sk_xprt.xpt_flags); in svc_tcp_accept()
937 static unsigned int svc_tcp_restore_pages(struct svc_sock *svsk, struct svc_rqst *rqstp) in svc_tcp_restore_pages() argument
941 if (svsk->sk_datalen == 0) in svc_tcp_restore_pages()
943 len = svsk->sk_datalen; in svc_tcp_restore_pages()
948 BUG_ON(svsk->sk_pages[i] == NULL); in svc_tcp_restore_pages()
949 rqstp->rq_pages[i] = svsk->sk_pages[i]; in svc_tcp_restore_pages()
950 svsk->sk_pages[i] = NULL; 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
960 if (svsk->sk_datalen == 0) in svc_tcp_save_pages()
962 len = svsk->sk_datalen; in svc_tcp_save_pages()
965 svsk->sk_pages[i] = rqstp->rq_pages[i]; in svc_tcp_save_pages()
970 static void svc_tcp_clear_pages(struct svc_sock *svsk) in svc_tcp_clear_pages() argument
974 if (svsk->sk_datalen == 0) in svc_tcp_clear_pages()
976 len = svsk->sk_datalen; in svc_tcp_clear_pages()
979 if (svsk->sk_pages[i] == NULL) { in svc_tcp_clear_pages()
983 put_page(svsk->sk_pages[i]); in svc_tcp_clear_pages()
984 svsk->sk_pages[i] = NULL; in svc_tcp_clear_pages()
987 svsk->sk_tcplen = 0; in svc_tcp_clear_pages()
988 svsk->sk_datalen = 0; in svc_tcp_clear_pages()
995 static int svc_tcp_recv_record(struct svc_sock *svsk, struct svc_rqst *rqstp) in svc_tcp_recv_record() argument
997 struct svc_serv *serv = svsk->sk_xprt.xpt_server; in svc_tcp_recv_record()
1001 if (svsk->sk_tcplen < sizeof(rpc_fraghdr)) { in svc_tcp_recv_record()
1004 want = sizeof(rpc_fraghdr) - svsk->sk_tcplen; in svc_tcp_recv_record()
1005 iov.iov_base = ((char *) &svsk->sk_reclen) + svsk->sk_tcplen; in svc_tcp_recv_record()
1009 svsk->sk_tcplen += len; in svc_tcp_recv_record()
1017 dprintk("svc: TCP record, %d bytes\n", svc_sock_reclen(svsk)); in svc_tcp_recv_record()
1018 if (svc_sock_reclen(svsk) + svsk->sk_datalen > in svc_tcp_recv_record()
1021 svc_sock_reclen(svsk)); in svc_tcp_recv_record()
1026 return svc_sock_reclen(svsk); in svc_tcp_recv_record()
1031 set_bit(XPT_CLOSE, &svsk->sk_xprt.xpt_flags); in svc_tcp_recv_record()
1035 static int receive_cb_reply(struct svc_sock *svsk, struct svc_rqst *rqstp) in receive_cb_reply() argument
1037 struct rpc_xprt *bc_xprt = svsk->sk_xprt.xpt_bc_xprt; in receive_cb_reply()
1094 static void svc_tcp_fragment_received(struct svc_sock *svsk) in svc_tcp_fragment_received() argument
1098 svc_sock_final_rec(svsk) ? "final" : "nonfinal", in svc_tcp_fragment_received()
1099 svc_sock_reclen(svsk)); in svc_tcp_fragment_received()
1100 svsk->sk_tcplen = 0; in svc_tcp_fragment_received()
1101 svsk->sk_reclen = 0; in svc_tcp_fragment_received()
1109 struct svc_sock *svsk = in svc_tcp_recvfrom() local
1111 struct svc_serv *serv = svsk->sk_xprt.xpt_server; in svc_tcp_recvfrom()
1120 svsk, test_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags), in svc_tcp_recvfrom()
1121 test_bit(XPT_CONN, &svsk->sk_xprt.xpt_flags), in svc_tcp_recvfrom()
1122 test_bit(XPT_CLOSE, &svsk->sk_xprt.xpt_flags)); 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()
1129 want = svc_sock_reclen(svsk) - (svsk->sk_tcplen - sizeof(rpc_fraghdr)); in svc_tcp_recvfrom()
1134 svsk->sk_datalen + want); in svc_tcp_recvfrom()
1142 svsk->sk_tcplen += len; in svc_tcp_recvfrom()
1143 svsk->sk_datalen += len; in svc_tcp_recvfrom()
1145 if (len != want || !svc_sock_final_rec(svsk)) { in svc_tcp_recvfrom()
1146 svc_tcp_save_pages(svsk, rqstp); in svc_tcp_recvfrom()
1150 svc_tcp_fragment_received(svsk); in svc_tcp_recvfrom()
1153 (int)(svsk->sk_tcplen - sizeof(rpc_fraghdr)), in svc_tcp_recvfrom()
1154 svc_sock_reclen(svsk)); in svc_tcp_recvfrom()
1158 if (svsk->sk_datalen < 8) { in svc_tcp_recvfrom()
1159 svsk->sk_datalen = 0; in svc_tcp_recvfrom()
1163 rqstp->rq_arg.len = svsk->sk_datalen; in svc_tcp_recvfrom()
1173 if (test_bit(XPT_LOCAL, &svsk->sk_xprt.xpt_flags)) in svc_tcp_recvfrom()
1181 len = receive_cb_reply(svsk, rqstp); in svc_tcp_recvfrom()
1184 svsk->sk_datalen = 0; in svc_tcp_recvfrom()
1185 svc_tcp_fragment_received(svsk); in svc_tcp_recvfrom()
1190 svc_xprt_copy_addrs(rqstp, &svsk->sk_xprt); in svc_tcp_recvfrom()
1203 svsk->sk_xprt.xpt_server->sv_name, -len); in svc_tcp_recvfrom()
1204 set_bit(XPT_CLOSE, &svsk->sk_xprt.xpt_flags); in svc_tcp_recvfrom()
1347 static void svc_tcp_init(struct svc_sock *svsk, struct svc_serv *serv) in svc_tcp_init() argument
1349 struct sock *sk = svsk->sk_sk; in svc_tcp_init()
1351 svc_xprt_init(sock_net(svsk->sk_sock->sk), &svc_tcp_class, in svc_tcp_init()
1352 &svsk->sk_xprt, serv); in svc_tcp_init()
1353 set_bit(XPT_CACHE_AUTH, &svsk->sk_xprt.xpt_flags); in svc_tcp_init()
1356 set_bit(XPT_LISTENER, &svsk->sk_xprt.xpt_flags); in svc_tcp_init()
1358 set_bit(XPT_CONN, &svsk->sk_xprt.xpt_flags); in svc_tcp_init()
1365 svsk->sk_reclen = 0; in svc_tcp_init()
1366 svsk->sk_tcplen = 0; in svc_tcp_init()
1367 svsk->sk_datalen = 0; in svc_tcp_init()
1368 memset(&svsk->sk_pages[0], 0, sizeof(svsk->sk_pages)); in svc_tcp_init()
1372 set_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags); in svc_tcp_init()
1374 set_bit(XPT_CLOSE, &svsk->sk_xprt.xpt_flags); in svc_tcp_init()
1384 struct svc_sock *svsk; in svc_sock_update_bufs() local
1387 list_for_each_entry(svsk, &serv->sv_permsocks, sk_xprt.xpt_list) in svc_sock_update_bufs()
1388 set_bit(XPT_CHNGBUF, &svsk->sk_xprt.xpt_flags); in svc_sock_update_bufs()
1400 struct svc_sock *svsk; in svc_setup_socket() local
1406 svsk = kzalloc(sizeof(*svsk), GFP_KERNEL); in svc_setup_socket()
1407 if (!svsk) in svc_setup_socket()
1419 kfree(svsk); in svc_setup_socket()
1423 inet->sk_user_data = svsk; in svc_setup_socket()
1424 svsk->sk_sock = sock; in svc_setup_socket()
1425 svsk->sk_sk = inet; in svc_setup_socket()
1426 svsk->sk_ostate = inet->sk_state_change; in svc_setup_socket()
1427 svsk->sk_odata = inet->sk_data_ready; in svc_setup_socket()
1428 svsk->sk_owspace = inet->sk_write_space; in svc_setup_socket()
1432 svc_udp_init(svsk, serv); in svc_setup_socket()
1437 svc_sock_setbufsize(svsk->sk_sock, 4 * serv->sv_max_mesg, in svc_setup_socket()
1439 svc_tcp_init(svsk, serv); in svc_setup_socket()
1443 svsk, svsk->sk_sk); in svc_setup_socket()
1445 return svsk; in svc_setup_socket()
1480 struct svc_sock *svsk = NULL; in svc_addsock() local
1500 svsk = svc_setup_socket(serv, so, SVC_SOCK_DEFAULTS); in svc_addsock()
1501 if (IS_ERR(svsk)) { in svc_addsock()
1503 err = PTR_ERR(svsk); in svc_addsock()
1506 if (kernel_getsockname(svsk->sk_sock, sin, &salen) == 0) in svc_addsock()
1507 svc_xprt_set_local(&svsk->sk_xprt, sin, salen); in svc_addsock()
1508 svc_add_new_perm_xprt(serv, &svsk->sk_xprt); in svc_addsock()
1509 return svc_one_sock_name(svsk, name_return, len); in svc_addsock()
1525 struct svc_sock *svsk; in svc_create_socket() local
1590 svsk = svc_setup_socket(serv, sock, flags); in svc_create_socket()
1591 if (IS_ERR(svsk)) { in svc_create_socket()
1592 error = PTR_ERR(svsk); in svc_create_socket()
1595 svc_xprt_set_local(&svsk->sk_xprt, newsin, newlen); in svc_create_socket()
1596 return (struct svc_xprt *)svsk; in svc_create_socket()
1609 struct svc_sock *svsk = container_of(xprt, struct svc_sock, sk_xprt); in svc_sock_detach() local
1610 struct sock *sk = svsk->sk_sk; in svc_sock_detach()
1613 dprintk("svc: svc_sock_detach(%p)\n", svsk); in svc_sock_detach()
1616 sk->sk_state_change = svsk->sk_ostate; in svc_sock_detach()
1617 sk->sk_data_ready = svsk->sk_odata; in svc_sock_detach()
1618 sk->sk_write_space = svsk->sk_owspace; in svc_sock_detach()
1630 struct svc_sock *svsk = container_of(xprt, struct svc_sock, sk_xprt); in svc_tcp_sock_detach() local
1632 dprintk("svc: svc_tcp_sock_detach(%p)\n", svsk); in svc_tcp_sock_detach()
1637 svc_tcp_clear_pages(svsk); in svc_tcp_sock_detach()
1638 kernel_sock_shutdown(svsk->sk_sock, SHUT_RDWR); in svc_tcp_sock_detach()
1647 struct svc_sock *svsk = container_of(xprt, struct svc_sock, sk_xprt); in svc_sock_free() local
1648 dprintk("svc: svc_sock_free(%p)\n", svsk); in svc_sock_free()
1650 if (svsk->sk_sock->file) in svc_sock_free()
1651 sockfd_put(svsk->sk_sock); in svc_sock_free()
1653 sock_release(svsk->sk_sock); in svc_sock_free()
1654 kfree(svsk); in svc_sock_free()
1667 struct svc_sock *svsk; in svc_bc_create_socket() local
1676 svsk = kzalloc(sizeof(*svsk), GFP_KERNEL); in svc_bc_create_socket()
1677 if (!svsk) in svc_bc_create_socket()
1680 xprt = &svsk->sk_xprt; in svc_bc_create_socket()