Lines Matching refs:transport
441 struct sock_xprt *transport = container_of(task->tk_rqstp->rq_xprt, struct sock_xprt, xprt); in xs_nospace_callback() local
443 transport->inet->sk_write_pending--; in xs_nospace_callback()
455 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_nospace() local
456 struct sock *sk = transport->inet; in xs_nospace()
506 struct sock_xprt *transport = in xs_local_send_request() local
517 status = xs_sendpages(transport->sock, NULL, 0, xdr, req->rq_bytes_sent, in xs_local_send_request()
522 if (status == -EAGAIN && sock_writeable(transport->inet)) in xs_local_send_request()
567 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_udp_send_request() local
578 status = xs_sendpages(transport->sock, xs_addr(xprt), xprt->addrlen, in xs_udp_send_request()
588 if (status == -EAGAIN && sock_writeable(transport->inet)) in xs_udp_send_request()
642 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_tcp_send_request() local
665 status = xs_sendpages(transport->sock, NULL, 0, xdr, in xs_tcp_send_request()
687 if (status == -EAGAIN && sk_stream_is_writeable(transport->inet)) in xs_tcp_send_request()
742 static void xs_save_old_callbacks(struct sock_xprt *transport, struct sock *sk) in xs_save_old_callbacks() argument
744 transport->old_data_ready = sk->sk_data_ready; in xs_save_old_callbacks()
745 transport->old_state_change = sk->sk_state_change; in xs_save_old_callbacks()
746 transport->old_write_space = sk->sk_write_space; in xs_save_old_callbacks()
747 transport->old_error_report = sk->sk_error_report; in xs_save_old_callbacks()
750 static void xs_restore_old_callbacks(struct sock_xprt *transport, struct sock *sk) in xs_restore_old_callbacks() argument
752 sk->sk_data_ready = transport->old_data_ready; in xs_restore_old_callbacks()
753 sk->sk_state_change = transport->old_state_change; in xs_restore_old_callbacks()
754 sk->sk_write_space = transport->old_write_space; in xs_restore_old_callbacks()
755 sk->sk_error_report = transport->old_error_report; in xs_restore_old_callbacks()
803 static void xs_reset_transport(struct sock_xprt *transport) in xs_reset_transport() argument
805 struct socket *sock = transport->sock; in xs_reset_transport()
806 struct sock *sk = transport->inet; in xs_reset_transport()
807 struct rpc_xprt *xprt = &transport->xprt; in xs_reset_transport()
812 if (atomic_read(&transport->xprt.swapper)) in xs_reset_transport()
817 mutex_lock(&transport->recv_mutex); in xs_reset_transport()
819 transport->inet = NULL; in xs_reset_transport()
820 transport->sock = NULL; in xs_reset_transport()
824 xs_restore_old_callbacks(transport, sk); in xs_reset_transport()
828 mutex_unlock(&transport->recv_mutex); in xs_reset_transport()
846 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_close() local
850 xs_reset_transport(transport); in xs_close()
876 struct sock_xprt *transport = container_of(xprt, in xs_destroy() local
880 cancel_delayed_work_sync(&transport->connect_worker); in xs_destroy()
882 cancel_work_sync(&transport->recv_worker); in xs_destroy()
953 static void xs_local_data_receive(struct sock_xprt *transport) in xs_local_data_receive() argument
959 mutex_lock(&transport->recv_mutex); in xs_local_data_receive()
960 sk = transport->inet; in xs_local_data_receive()
967 xs_local_data_read_skb(&transport->xprt, sk, skb); in xs_local_data_receive()
971 mutex_unlock(&transport->recv_mutex); in xs_local_data_receive()
976 struct sock_xprt *transport = in xs_local_data_receive_workfn() local
978 xs_local_data_receive(transport); in xs_local_data_receive_workfn()
1035 static void xs_udp_data_receive(struct sock_xprt *transport) in xs_udp_data_receive() argument
1041 mutex_lock(&transport->recv_mutex); in xs_udp_data_receive()
1042 sk = transport->inet; in xs_udp_data_receive()
1049 xs_udp_data_read_skb(&transport->xprt, sk, skb); in xs_udp_data_receive()
1053 mutex_unlock(&transport->recv_mutex); in xs_udp_data_receive()
1058 struct sock_xprt *transport = in xs_udp_data_receive_workfn() local
1060 xs_udp_data_receive(transport); in xs_udp_data_receive_workfn()
1076 struct sock_xprt *transport = container_of(xprt, in xs_data_ready() local
1078 queue_work(rpciod_workqueue, &transport->recv_worker); in xs_data_ready()
1094 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_tcp_read_fraghdr() local
1098 p = ((char *) &transport->tcp_fraghdr) + transport->tcp_offset; in xs_tcp_read_fraghdr()
1099 len = sizeof(transport->tcp_fraghdr) - transport->tcp_offset; in xs_tcp_read_fraghdr()
1101 transport->tcp_offset += used; in xs_tcp_read_fraghdr()
1105 transport->tcp_reclen = ntohl(transport->tcp_fraghdr); in xs_tcp_read_fraghdr()
1106 if (transport->tcp_reclen & RPC_LAST_STREAM_FRAGMENT) in xs_tcp_read_fraghdr()
1107 transport->tcp_flags |= TCP_RCV_LAST_FRAG; in xs_tcp_read_fraghdr()
1109 transport->tcp_flags &= ~TCP_RCV_LAST_FRAG; in xs_tcp_read_fraghdr()
1110 transport->tcp_reclen &= RPC_FRAGMENT_SIZE_MASK; in xs_tcp_read_fraghdr()
1112 transport->tcp_flags &= ~TCP_RCV_COPY_FRAGHDR; in xs_tcp_read_fraghdr()
1113 transport->tcp_offset = 0; in xs_tcp_read_fraghdr()
1116 if (unlikely(transport->tcp_reclen < 8)) { in xs_tcp_read_fraghdr()
1122 transport->tcp_reclen); in xs_tcp_read_fraghdr()
1125 static void xs_tcp_check_fraghdr(struct sock_xprt *transport) in xs_tcp_check_fraghdr() argument
1127 if (transport->tcp_offset == transport->tcp_reclen) { in xs_tcp_check_fraghdr()
1128 transport->tcp_flags |= TCP_RCV_COPY_FRAGHDR; in xs_tcp_check_fraghdr()
1129 transport->tcp_offset = 0; in xs_tcp_check_fraghdr()
1130 if (transport->tcp_flags & TCP_RCV_LAST_FRAG) { in xs_tcp_check_fraghdr()
1131 transport->tcp_flags &= ~TCP_RCV_COPY_DATA; in xs_tcp_check_fraghdr()
1132 transport->tcp_flags |= TCP_RCV_COPY_XID; in xs_tcp_check_fraghdr()
1133 transport->tcp_copied = 0; in xs_tcp_check_fraghdr()
1138 static inline void xs_tcp_read_xid(struct sock_xprt *transport, struct xdr_skb_reader *desc) in xs_tcp_read_xid() argument
1143 len = sizeof(transport->tcp_xid) - transport->tcp_offset; in xs_tcp_read_xid()
1145 p = ((char *) &transport->tcp_xid) + transport->tcp_offset; in xs_tcp_read_xid()
1147 transport->tcp_offset += used; in xs_tcp_read_xid()
1150 transport->tcp_flags &= ~TCP_RCV_COPY_XID; in xs_tcp_read_xid()
1151 transport->tcp_flags |= TCP_RCV_READ_CALLDIR; in xs_tcp_read_xid()
1152 transport->tcp_copied = 4; in xs_tcp_read_xid()
1154 (transport->tcp_flags & TCP_RPC_REPLY) ? "reply for" in xs_tcp_read_xid()
1156 ntohl(transport->tcp_xid)); in xs_tcp_read_xid()
1157 xs_tcp_check_fraghdr(transport); in xs_tcp_read_xid()
1160 static inline void xs_tcp_read_calldir(struct sock_xprt *transport, in xs_tcp_read_calldir() argument
1173 offset = transport->tcp_offset - sizeof(transport->tcp_xid); in xs_tcp_read_calldir()
1174 len = sizeof(transport->tcp_calldir) - offset; in xs_tcp_read_calldir()
1176 p = ((char *) &transport->tcp_calldir) + offset; in xs_tcp_read_calldir()
1178 transport->tcp_offset += used; in xs_tcp_read_calldir()
1181 transport->tcp_flags &= ~TCP_RCV_READ_CALLDIR; in xs_tcp_read_calldir()
1186 switch (ntohl(transport->tcp_calldir)) { in xs_tcp_read_calldir()
1188 transport->tcp_flags |= TCP_RCV_COPY_CALLDIR; in xs_tcp_read_calldir()
1189 transport->tcp_flags |= TCP_RCV_COPY_DATA; in xs_tcp_read_calldir()
1190 transport->tcp_flags |= TCP_RPC_REPLY; in xs_tcp_read_calldir()
1193 transport->tcp_flags |= TCP_RCV_COPY_CALLDIR; in xs_tcp_read_calldir()
1194 transport->tcp_flags |= TCP_RCV_COPY_DATA; in xs_tcp_read_calldir()
1195 transport->tcp_flags &= ~TCP_RPC_REPLY; in xs_tcp_read_calldir()
1199 xs_tcp_force_close(&transport->xprt); in xs_tcp_read_calldir()
1201 xs_tcp_check_fraghdr(transport); in xs_tcp_read_calldir()
1208 struct sock_xprt *transport = in xs_tcp_read_common() local
1216 if (transport->tcp_flags & TCP_RCV_COPY_CALLDIR) { in xs_tcp_read_common()
1220 memcpy(rcvbuf->head[0].iov_base + transport->tcp_copied, in xs_tcp_read_common()
1221 &transport->tcp_calldir, in xs_tcp_read_common()
1222 sizeof(transport->tcp_calldir)); in xs_tcp_read_common()
1223 transport->tcp_copied += sizeof(transport->tcp_calldir); in xs_tcp_read_common()
1224 transport->tcp_flags &= ~TCP_RCV_COPY_CALLDIR; in xs_tcp_read_common()
1228 if (len > transport->tcp_reclen - transport->tcp_offset) { in xs_tcp_read_common()
1231 len = transport->tcp_reclen - transport->tcp_offset; in xs_tcp_read_common()
1234 r = xdr_partial_copy_from_skb(rcvbuf, transport->tcp_copied, in xs_tcp_read_common()
1239 r = xdr_partial_copy_from_skb(rcvbuf, transport->tcp_copied, in xs_tcp_read_common()
1243 transport->tcp_copied += r; in xs_tcp_read_common()
1244 transport->tcp_offset += r; in xs_tcp_read_common()
1256 transport->tcp_flags &= ~TCP_RCV_COPY_DATA; in xs_tcp_read_common()
1258 ntohl(transport->tcp_xid)); in xs_tcp_read_common()
1261 xprt, transport->tcp_copied, in xs_tcp_read_common()
1262 transport->tcp_offset, transport->tcp_reclen); in xs_tcp_read_common()
1267 ntohl(transport->tcp_xid), r); in xs_tcp_read_common()
1269 "tcp_reclen = %u\n", xprt, transport->tcp_copied, in xs_tcp_read_common()
1270 transport->tcp_offset, transport->tcp_reclen); in xs_tcp_read_common()
1272 if (transport->tcp_copied == req->rq_private_buf.buflen) in xs_tcp_read_common()
1273 transport->tcp_flags &= ~TCP_RCV_COPY_DATA; in xs_tcp_read_common()
1274 else if (transport->tcp_offset == transport->tcp_reclen) { in xs_tcp_read_common()
1275 if (transport->tcp_flags & TCP_RCV_LAST_FRAG) in xs_tcp_read_common()
1276 transport->tcp_flags &= ~TCP_RCV_COPY_DATA; in xs_tcp_read_common()
1287 struct sock_xprt *transport = in xs_tcp_read_reply() local
1291 dprintk("RPC: read reply XID %08x\n", ntohl(transport->tcp_xid)); in xs_tcp_read_reply()
1295 req = xprt_lookup_rqst(xprt, transport->tcp_xid); in xs_tcp_read_reply()
1298 ntohl(transport->tcp_xid)); in xs_tcp_read_reply()
1305 if (!(transport->tcp_flags & TCP_RCV_COPY_DATA)) in xs_tcp_read_reply()
1306 xprt_complete_rqst(req->rq_task, transport->tcp_copied); in xs_tcp_read_reply()
1323 struct sock_xprt *transport = in xs_tcp_read_callback() local
1329 req = xprt_lookup_bc_request(xprt, transport->tcp_xid); in xs_tcp_read_callback()
1340 if (!(transport->tcp_flags & TCP_RCV_COPY_DATA)) in xs_tcp_read_callback()
1341 xprt_complete_bc_request(req, transport->tcp_copied); in xs_tcp_read_callback()
1350 struct sock_xprt *transport = in _xs_tcp_read_data() local
1353 return (transport->tcp_flags & TCP_RPC_REPLY) ? in _xs_tcp_read_data()
1383 struct sock_xprt *transport = in xs_tcp_read_data() local
1387 xs_tcp_check_fraghdr(transport); in xs_tcp_read_data()
1393 transport->tcp_flags &= ~TCP_RCV_COPY_DATA; in xs_tcp_read_data()
1397 static inline void xs_tcp_read_discard(struct sock_xprt *transport, struct xdr_skb_reader *desc) in xs_tcp_read_discard() argument
1401 len = transport->tcp_reclen - transport->tcp_offset; in xs_tcp_read_discard()
1406 transport->tcp_offset += len; in xs_tcp_read_discard()
1408 xs_tcp_check_fraghdr(transport); in xs_tcp_read_discard()
1414 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_tcp_data_recv() local
1423 trace_xs_tcp_data_recv(transport); in xs_tcp_data_recv()
1426 if (transport->tcp_flags & TCP_RCV_COPY_FRAGHDR) { in xs_tcp_data_recv()
1431 if (transport->tcp_flags & TCP_RCV_COPY_XID) { in xs_tcp_data_recv()
1432 xs_tcp_read_xid(transport, &desc); in xs_tcp_data_recv()
1436 if (transport->tcp_flags & TCP_RCV_READ_CALLDIR) { in xs_tcp_data_recv()
1437 xs_tcp_read_calldir(transport, &desc); in xs_tcp_data_recv()
1441 if (transport->tcp_flags & TCP_RCV_COPY_DATA) { in xs_tcp_data_recv()
1446 xs_tcp_read_discard(transport, &desc); in xs_tcp_data_recv()
1448 trace_xs_tcp_data_recv(transport); in xs_tcp_data_recv()
1453 static void xs_tcp_data_receive(struct sock_xprt *transport) in xs_tcp_data_receive() argument
1455 struct rpc_xprt *xprt = &transport->xprt; in xs_tcp_data_receive()
1464 mutex_lock(&transport->recv_mutex); in xs_tcp_data_receive()
1465 sk = transport->inet; in xs_tcp_data_receive()
1480 mutex_unlock(&transport->recv_mutex); in xs_tcp_data_receive()
1486 struct sock_xprt *transport = in xs_tcp_data_receive_workfn() local
1488 xs_tcp_data_receive(transport); in xs_tcp_data_receive_workfn()
1498 struct sock_xprt *transport; in xs_tcp_data_ready() local
1506 transport = container_of(xprt, struct sock_xprt, xprt); in xs_tcp_data_ready()
1513 queue_work(rpciod_workqueue, &transport->recv_worker); in xs_tcp_data_ready()
1527 struct sock_xprt *transport; in xs_tcp_state_change() local
1539 transport = container_of(xprt, struct sock_xprt, xprt); in xs_tcp_state_change()
1547 transport->tcp_offset = 0; in xs_tcp_state_change()
1548 transport->tcp_reclen = 0; in xs_tcp_state_change()
1549 transport->tcp_copied = 0; in xs_tcp_state_change()
1550 transport->tcp_flags = in xs_tcp_state_change()
1553 clear_bit(XPRT_SOCK_CONNECTING, &transport->sock_state); in xs_tcp_state_change()
1591 &transport->sock_state)) in xs_tcp_state_change()
1664 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_udp_do_set_buffer_size() local
1665 struct sock *sk = transport->inet; in xs_udp_do_set_buffer_size()
1667 if (transport->rcvsize) { in xs_udp_do_set_buffer_size()
1669 sk->sk_rcvbuf = transport->rcvsize * xprt->max_reqs * 2; in xs_udp_do_set_buffer_size()
1671 if (transport->sndsize) { in xs_udp_do_set_buffer_size()
1673 sk->sk_sndbuf = transport->sndsize * xprt->max_reqs * 2; in xs_udp_do_set_buffer_size()
1688 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_udp_set_buffer_size() local
1690 transport->sndsize = 0; in xs_udp_set_buffer_size()
1692 transport->sndsize = sndsize + 1024; in xs_udp_set_buffer_size()
1693 transport->rcvsize = 0; in xs_udp_set_buffer_size()
1695 transport->rcvsize = rcvsize + 1024; in xs_udp_set_buffer_size()
1766 static void xs_set_srcport(struct sock_xprt *transport, struct socket *sock) in xs_set_srcport() argument
1768 if (transport->srcport == 0) in xs_set_srcport()
1769 transport->srcport = xs_sock_getport(sock); in xs_set_srcport()
1772 static unsigned short xs_get_srcport(struct sock_xprt *transport) in xs_get_srcport() argument
1774 unsigned short port = transport->srcport; in xs_get_srcport()
1776 if (port == 0 && transport->xprt.resvport) in xs_get_srcport()
1781 static unsigned short xs_next_srcport(struct sock_xprt *transport, unsigned short port) in xs_next_srcport() argument
1783 if (transport->srcport != 0) in xs_next_srcport()
1784 transport->srcport = 0; in xs_next_srcport()
1785 if (!transport->xprt.resvport) in xs_next_srcport()
1791 static int xs_bind(struct sock_xprt *transport, struct socket *sock) in xs_bind() argument
1795 unsigned short port = xs_get_srcport(transport); in xs_bind()
1816 memcpy(&myaddr, &transport->srcaddr, transport->xprt.addrlen); in xs_bind()
1820 transport->xprt.addrlen); in xs_bind()
1822 transport->srcport = port; in xs_bind()
1826 port = xs_next_srcport(transport, port); in xs_bind()
1925 struct sock_xprt *transport, int family, int type, in xs_create_sock() argument
1942 err = xs_bind(transport, sock); in xs_create_sock()
1956 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, in xs_local_finish_connecting() local
1959 if (!transport->inet) { in xs_local_finish_connecting()
1964 xs_save_old_callbacks(transport, sk); in xs_local_finish_connecting()
1975 transport->sock = sock; in xs_local_finish_connecting()
1976 transport->inet = sk; in xs_local_finish_connecting()
1991 static int xs_local_setup_socket(struct sock_xprt *transport) in xs_local_setup_socket() argument
1993 struct rpc_xprt *xprt = &transport->xprt; in xs_local_setup_socket()
2040 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_local_connect() local
2056 ret = xs_local_setup_socket(transport); in xs_local_connect()
2069 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, in xs_set_memalloc() local
2076 if (!transport->inet) in xs_set_memalloc()
2079 sk_set_memalloc(transport->inet); in xs_set_memalloc()
2143 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_udp_finish_connecting() local
2145 if (!transport->inet) { in xs_udp_finish_connecting()
2150 xs_save_old_callbacks(transport, sk); in xs_udp_finish_connecting()
2160 transport->sock = sock; in xs_udp_finish_connecting()
2161 transport->inet = sk; in xs_udp_finish_connecting()
2172 struct sock_xprt *transport = in xs_udp_setup_socket() local
2174 struct rpc_xprt *xprt = &transport->xprt; in xs_udp_setup_socket()
2175 struct socket *sock = transport->sock; in xs_udp_setup_socket()
2178 sock = xs_create_sock(xprt, transport, in xs_udp_setup_socket()
2194 xprt_unlock_connect(xprt, transport); in xs_udp_setup_socket()
2208 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_tcp_shutdown() local
2209 struct socket *sock = transport->sock; in xs_tcp_shutdown()
2217 xs_reset_transport(transport); in xs_tcp_shutdown()
2222 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_tcp_finish_connecting() local
2225 if (!transport->inet) { in xs_tcp_finish_connecting()
2250 xs_save_old_callbacks(transport, sk); in xs_tcp_finish_connecting()
2266 transport->sock = sock; in xs_tcp_finish_connecting()
2267 transport->inet = sk; in xs_tcp_finish_connecting()
2280 set_bit(XPRT_SOCK_CONNECTING, &transport->sock_state); in xs_tcp_finish_connecting()
2284 xs_set_srcport(transport, sock); in xs_tcp_finish_connecting()
2301 struct sock_xprt *transport = in xs_tcp_setup_socket() local
2303 struct socket *sock = transport->sock; in xs_tcp_setup_socket()
2304 struct rpc_xprt *xprt = &transport->xprt; in xs_tcp_setup_socket()
2308 sock = xs_create_sock(xprt, transport, in xs_tcp_setup_socket()
2341 xprt_unlock_connect(xprt, transport); in xs_tcp_setup_socket()
2358 xprt_unlock_connect(xprt, transport); in xs_tcp_setup_socket()
2379 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_connect() local
2381 WARN_ON_ONCE(!xprt_lock_connect(xprt, task, transport)); in xs_connect()
2383 if (transport->sock != NULL) { in xs_connect()
2389 xs_reset_transport(transport); in xs_connect()
2392 &transport->connect_worker, in xs_connect()
2402 &transport->connect_worker, 0); in xs_connect()
2443 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_udp_print_stats() local
2447 transport->srcport, in xs_udp_print_stats()
2467 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_tcp_print_stats() local
2475 transport->srcport, in xs_tcp_print_stats()
2537 struct sock_xprt *transport = in bc_sendto() local
2539 struct socket *sock = transport->sock; in bc_sendto()
2783 struct sock_xprt *transport; in xs_setup_local() local
2791 transport = container_of(xprt, struct sock_xprt, xprt); in xs_setup_local()
2804 INIT_WORK(&transport->recv_worker, xs_local_data_receive_workfn); in xs_setup_local()
2805 INIT_DELAYED_WORK(&transport->connect_worker, in xs_setup_local()
2818 ret = ERR_PTR(xs_local_setup_socket(transport)); in xs_setup_local()
2854 struct sock_xprt *transport; in xs_setup_udp() local
2861 transport = container_of(xprt, struct sock_xprt, xprt); in xs_setup_udp()
2876 INIT_WORK(&transport->recv_worker, xs_udp_data_receive_workfn); in xs_setup_udp()
2877 INIT_DELAYED_WORK(&transport->connect_worker, xs_udp_setup_socket); in xs_setup_udp()
2930 struct sock_xprt *transport; in xs_setup_tcp() local
2941 transport = container_of(xprt, struct sock_xprt, xprt); in xs_setup_tcp()
2954 INIT_WORK(&transport->recv_worker, xs_tcp_data_receive_workfn); in xs_setup_tcp()
2955 INIT_DELAYED_WORK(&transport->connect_worker, xs_tcp_setup_socket); in xs_setup_tcp()
3002 struct sock_xprt *transport; in xs_setup_bc_tcp() local
3010 transport = container_of(xprt, struct sock_xprt, xprt); in xs_setup_bc_tcp()
3054 transport->sock = bc_sock->sk_sock; in xs_setup_bc_tcp()
3055 transport->inet = bc_sock->sk_sk; in xs_setup_bc_tcp()