Lines Matching refs:xprt

54 static void xs_close(struct rpc_xprt *xprt);
224 static inline struct sockaddr *xs_addr(struct rpc_xprt *xprt) in xs_addr() argument
226 return (struct sockaddr *) &xprt->addr; in xs_addr()
229 static inline struct sockaddr_un *xs_addr_un(struct rpc_xprt *xprt) in xs_addr_un() argument
231 return (struct sockaddr_un *) &xprt->addr; in xs_addr_un()
234 static inline struct sockaddr_in *xs_addr_in(struct rpc_xprt *xprt) in xs_addr_in() argument
236 return (struct sockaddr_in *) &xprt->addr; in xs_addr_in()
239 static inline struct sockaddr_in6 *xs_addr_in6(struct rpc_xprt *xprt) in xs_addr_in6() argument
241 return (struct sockaddr_in6 *) &xprt->addr; in xs_addr_in6()
244 static void xs_format_common_peer_addresses(struct rpc_xprt *xprt) in xs_format_common_peer_addresses() argument
246 struct sockaddr *sap = xs_addr(xprt); in xs_format_common_peer_addresses()
254 sun = xs_addr_un(xprt); in xs_format_common_peer_addresses()
256 xprt->address_strings[RPC_DISPLAY_ADDR] = in xs_format_common_peer_addresses()
261 xprt->address_strings[RPC_DISPLAY_ADDR] = in xs_format_common_peer_addresses()
263 sin = xs_addr_in(xprt); in xs_format_common_peer_addresses()
268 xprt->address_strings[RPC_DISPLAY_ADDR] = in xs_format_common_peer_addresses()
270 sin6 = xs_addr_in6(xprt); in xs_format_common_peer_addresses()
277 xprt->address_strings[RPC_DISPLAY_HEX_ADDR] = kstrdup(buf, GFP_KERNEL); in xs_format_common_peer_addresses()
280 static void xs_format_common_peer_ports(struct rpc_xprt *xprt) in xs_format_common_peer_ports() argument
282 struct sockaddr *sap = xs_addr(xprt); in xs_format_common_peer_ports()
286 xprt->address_strings[RPC_DISPLAY_PORT] = kstrdup(buf, GFP_KERNEL); in xs_format_common_peer_ports()
289 xprt->address_strings[RPC_DISPLAY_HEX_PORT] = kstrdup(buf, GFP_KERNEL); in xs_format_common_peer_ports()
292 static void xs_format_peer_addresses(struct rpc_xprt *xprt, in xs_format_peer_addresses() argument
296 xprt->address_strings[RPC_DISPLAY_PROTO] = protocol; in xs_format_peer_addresses()
297 xprt->address_strings[RPC_DISPLAY_NETID] = netid; in xs_format_peer_addresses()
298 xs_format_common_peer_addresses(xprt); in xs_format_peer_addresses()
299 xs_format_common_peer_ports(xprt); in xs_format_peer_addresses()
302 static void xs_update_peer_port(struct rpc_xprt *xprt) in xs_update_peer_port() argument
304 kfree(xprt->address_strings[RPC_DISPLAY_HEX_PORT]); in xs_update_peer_port()
305 kfree(xprt->address_strings[RPC_DISPLAY_PORT]); in xs_update_peer_port()
307 xs_format_common_peer_ports(xprt); in xs_update_peer_port()
310 static void xs_free_peer_addresses(struct rpc_xprt *xprt) in xs_free_peer_addresses() argument
320 kfree(xprt->address_strings[i]); in xs_free_peer_addresses()
441 struct sock_xprt *transport = container_of(task->tk_rqstp->rq_xprt, struct sock_xprt, xprt); in xs_nospace_callback()
454 struct rpc_xprt *xprt = req->rq_xprt; in xs_nospace() local
455 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_nospace()
464 spin_lock_bh(&xprt->transport_lock); in xs_nospace()
467 if (xprt_connected(xprt)) { in xs_nospace()
474 spin_unlock_bh(&xprt->transport_lock); in xs_nospace()
505 struct rpc_xprt *xprt = req->rq_xprt; in xs_local_send_request() local
507 container_of(xprt, struct sock_xprt, xprt); in xs_local_send_request()
545 xs_close(xprt); in xs_local_send_request()
566 struct rpc_xprt *xprt = req->rq_xprt; in xs_udp_send_request() local
567 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_udp_send_request()
576 if (!xprt_bound(xprt)) in xs_udp_send_request()
578 status = xs_sendpages(transport->sock, xs_addr(xprt), xprt->addrlen, in xs_udp_send_request()
641 struct rpc_xprt *xprt = req->rq_xprt; in xs_tcp_send_request() local
642 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_tcp_send_request()
722 static void xs_tcp_release_xprt(struct rpc_xprt *xprt, struct rpc_task *task) in xs_tcp_release_xprt() argument
726 if (task != xprt->snd_task) in xs_tcp_release_xprt()
737 set_bit(XPRT_CLOSE_WAIT, &xprt->state); in xs_tcp_release_xprt()
739 xprt_release_xprt(xprt, task); in xs_tcp_release_xprt()
758 static void xs_sock_reset_connection_flags(struct rpc_xprt *xprt) in xs_sock_reset_connection_flags() argument
761 clear_bit(XPRT_CLOSE_WAIT, &xprt->state); in xs_sock_reset_connection_flags()
762 clear_bit(XPRT_CLOSING, &xprt->state); in xs_sock_reset_connection_flags()
766 static void xs_sock_mark_closed(struct rpc_xprt *xprt) in xs_sock_mark_closed() argument
768 xs_sock_reset_connection_flags(xprt); in xs_sock_mark_closed()
770 xprt_disconnect_done(xprt); in xs_sock_mark_closed()
782 struct rpc_xprt *xprt; in xs_error_report() local
786 if (!(xprt = xprt_from_sock(sk))) in xs_error_report()
794 xs_sock_mark_closed(xprt); in xs_error_report()
796 xprt, -err); in xs_error_report()
797 trace_rpc_socket_error(xprt, sk->sk_socket, err); in xs_error_report()
798 xprt_wake_pending_tasks(xprt, err); in xs_error_report()
807 struct rpc_xprt *xprt = &transport->xprt; in xs_reset_transport() local
812 if (atomic_read(&transport->xprt.swapper)) in xs_reset_transport()
825 xprt_clear_connected(xprt); in xs_reset_transport()
827 xs_sock_reset_connection_flags(xprt); in xs_reset_transport()
830 trace_rpc_socket_close(xprt, sock); in xs_reset_transport()
844 static void xs_close(struct rpc_xprt *xprt) in xs_close() argument
846 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_close()
848 dprintk("RPC: xs_close xprt %p\n", xprt); in xs_close()
851 xprt->reestablish_timeout = 0; in xs_close()
853 xprt_disconnect_done(xprt); in xs_close()
856 static void xs_inject_disconnect(struct rpc_xprt *xprt) in xs_inject_disconnect() argument
859 xprt); in xs_inject_disconnect()
860 xprt_disconnect_done(xprt); in xs_inject_disconnect()
863 static void xs_xprt_free(struct rpc_xprt *xprt) in xs_xprt_free() argument
865 xs_free_peer_addresses(xprt); in xs_xprt_free()
866 xprt_free(xprt); in xs_xprt_free()
874 static void xs_destroy(struct rpc_xprt *xprt) in xs_destroy() argument
876 struct sock_xprt *transport = container_of(xprt, in xs_destroy()
877 struct sock_xprt, xprt); in xs_destroy()
878 dprintk("RPC: xs_destroy xprt %p\n", xprt); in xs_destroy()
881 xs_close(xprt); in xs_destroy()
883 xs_xprt_free(xprt); in xs_destroy()
910 static void xs_local_data_read_skb(struct rpc_xprt *xprt, in xs_local_data_read_skb() argument
932 spin_lock_bh(&xprt->transport_lock); in xs_local_data_read_skb()
933 rovr = xprt_lookup_rqst(xprt, *xp); in xs_local_data_read_skb()
950 spin_unlock_bh(&xprt->transport_lock); in xs_local_data_read_skb()
967 xs_local_data_read_skb(&transport->xprt, sk, skb); in xs_local_data_receive()
988 static void xs_udp_data_read_skb(struct rpc_xprt *xprt, in xs_udp_data_read_skb() argument
1011 spin_lock_bh(&xprt->transport_lock); in xs_udp_data_read_skb()
1012 rovr = xprt_lookup_rqst(xprt, *xp); in xs_udp_data_read_skb()
1028 xprt_adjust_cwnd(xprt, task, copied); in xs_udp_data_read_skb()
1032 spin_unlock_bh(&xprt->transport_lock); in xs_udp_data_read_skb()
1049 xs_udp_data_read_skb(&transport->xprt, sk, skb); in xs_udp_data_receive()
1070 struct rpc_xprt *xprt; in xs_data_ready() local
1074 xprt = xprt_from_sock(sk); in xs_data_ready()
1075 if (xprt != NULL) { in xs_data_ready()
1076 struct sock_xprt *transport = container_of(xprt, in xs_data_ready()
1077 struct sock_xprt, xprt); in xs_data_ready()
1087 static void xs_tcp_force_close(struct rpc_xprt *xprt) in xs_tcp_force_close() argument
1089 xprt_force_disconnect(xprt); in xs_tcp_force_close()
1092 static inline void xs_tcp_read_fraghdr(struct rpc_xprt *xprt, struct xdr_skb_reader *desc) in xs_tcp_read_fraghdr() argument
1094 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_tcp_read_fraghdr()
1118 xs_tcp_force_close(xprt); in xs_tcp_read_fraghdr()
1199 xs_tcp_force_close(&transport->xprt); in xs_tcp_read_calldir()
1204 static inline void xs_tcp_read_common(struct rpc_xprt *xprt, in xs_tcp_read_common() argument
1209 container_of(xprt, struct sock_xprt, xprt); in xs_tcp_read_common()
1261 xprt, transport->tcp_copied, in xs_tcp_read_common()
1269 "tcp_reclen = %u\n", xprt, transport->tcp_copied, in xs_tcp_read_common()
1284 static inline int xs_tcp_read_reply(struct rpc_xprt *xprt, in xs_tcp_read_reply() argument
1288 container_of(xprt, struct sock_xprt, xprt); in xs_tcp_read_reply()
1294 spin_lock_bh(&xprt->transport_lock); in xs_tcp_read_reply()
1295 req = xprt_lookup_rqst(xprt, transport->tcp_xid); in xs_tcp_read_reply()
1299 spin_unlock_bh(&xprt->transport_lock); in xs_tcp_read_reply()
1303 xs_tcp_read_common(xprt, desc, req); in xs_tcp_read_reply()
1308 spin_unlock_bh(&xprt->transport_lock); in xs_tcp_read_reply()
1320 static int xs_tcp_read_callback(struct rpc_xprt *xprt, in xs_tcp_read_callback() argument
1324 container_of(xprt, struct sock_xprt, xprt); in xs_tcp_read_callback()
1328 spin_lock_bh(&xprt->transport_lock); in xs_tcp_read_callback()
1329 req = xprt_lookup_bc_request(xprt, transport->tcp_xid); in xs_tcp_read_callback()
1331 spin_unlock_bh(&xprt->transport_lock); in xs_tcp_read_callback()
1333 xprt_force_disconnect(xprt); in xs_tcp_read_callback()
1338 xs_tcp_read_common(xprt, desc, req); in xs_tcp_read_callback()
1342 spin_unlock_bh(&xprt->transport_lock); in xs_tcp_read_callback()
1347 static inline int _xs_tcp_read_data(struct rpc_xprt *xprt, in _xs_tcp_read_data() argument
1351 container_of(xprt, struct sock_xprt, xprt); in _xs_tcp_read_data()
1354 xs_tcp_read_reply(xprt, desc) : in _xs_tcp_read_data()
1355 xs_tcp_read_callback(xprt, desc); in _xs_tcp_read_data()
1369 static inline int _xs_tcp_read_data(struct rpc_xprt *xprt, in _xs_tcp_read_data() argument
1372 return xs_tcp_read_reply(xprt, desc); in _xs_tcp_read_data()
1380 static void xs_tcp_read_data(struct rpc_xprt *xprt, in xs_tcp_read_data() argument
1384 container_of(xprt, struct sock_xprt, xprt); in xs_tcp_read_data()
1386 if (_xs_tcp_read_data(xprt, desc) == 0) in xs_tcp_read_data()
1413 struct rpc_xprt *xprt = rd_desc->arg.data; in xs_tcp_data_recv() local
1414 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_tcp_data_recv()
1427 xs_tcp_read_fraghdr(xprt, &desc); in xs_tcp_data_recv()
1442 xs_tcp_read_data(xprt, &desc); in xs_tcp_data_recv()
1455 struct rpc_xprt *xprt = &transport->xprt; in xs_tcp_data_receive() local
1459 .arg.data = xprt, in xs_tcp_data_receive()
1481 trace_xs_tcp_data_ready(xprt, read, total); in xs_tcp_data_receive()
1499 struct rpc_xprt *xprt; in xs_tcp_data_ready() local
1504 if (!(xprt = xprt_from_sock(sk))) in xs_tcp_data_ready()
1506 transport = container_of(xprt, struct sock_xprt, xprt); in xs_tcp_data_ready()
1511 if (xprt->reestablish_timeout) in xs_tcp_data_ready()
1512 xprt->reestablish_timeout = 0; in xs_tcp_data_ready()
1526 struct rpc_xprt *xprt; in xs_tcp_state_change() local
1530 if (!(xprt = xprt_from_sock(sk))) in xs_tcp_state_change()
1532 dprintk("RPC: xs_tcp_state_change client %p...\n", xprt); in xs_tcp_state_change()
1534 sk->sk_state, xprt_connected(xprt), in xs_tcp_state_change()
1539 transport = container_of(xprt, struct sock_xprt, xprt); in xs_tcp_state_change()
1540 trace_rpc_socket_state_change(xprt, sk->sk_socket); in xs_tcp_state_change()
1543 spin_lock(&xprt->transport_lock); in xs_tcp_state_change()
1544 if (!xprt_test_and_set_connected(xprt)) { in xs_tcp_state_change()
1552 xprt->connect_cookie++; in xs_tcp_state_change()
1554 xprt_clear_connecting(xprt); in xs_tcp_state_change()
1556 xprt_wake_pending_tasks(xprt, -EAGAIN); in xs_tcp_state_change()
1558 spin_unlock(&xprt->transport_lock); in xs_tcp_state_change()
1562 xprt->connect_cookie++; in xs_tcp_state_change()
1563 xprt->reestablish_timeout = 0; in xs_tcp_state_change()
1564 set_bit(XPRT_CLOSING, &xprt->state); in xs_tcp_state_change()
1566 clear_bit(XPRT_CONNECTED, &xprt->state); in xs_tcp_state_change()
1567 clear_bit(XPRT_CLOSE_WAIT, &xprt->state); in xs_tcp_state_change()
1572 xprt->connect_cookie++; in xs_tcp_state_change()
1573 clear_bit(XPRT_CONNECTED, &xprt->state); in xs_tcp_state_change()
1574 xs_tcp_force_close(xprt); in xs_tcp_state_change()
1580 if (xprt->reestablish_timeout < XS_TCP_INIT_REEST_TO) in xs_tcp_state_change()
1581 xprt->reestablish_timeout = XS_TCP_INIT_REEST_TO; in xs_tcp_state_change()
1584 set_bit(XPRT_CLOSING, &xprt->state); in xs_tcp_state_change()
1586 clear_bit(XPRT_CONNECTED, &xprt->state); in xs_tcp_state_change()
1592 xprt_clear_connecting(xprt); in xs_tcp_state_change()
1593 xs_sock_mark_closed(xprt); in xs_tcp_state_change()
1602 struct rpc_xprt *xprt; in xs_write_space() local
1608 if (unlikely(!(xprt = xprt_from_sock(sk)))) in xs_write_space()
1615 xprt_write_space(xprt); in xs_write_space()
1662 static void xs_udp_do_set_buffer_size(struct rpc_xprt *xprt) in xs_udp_do_set_buffer_size() argument
1664 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_udp_do_set_buffer_size()
1669 sk->sk_rcvbuf = transport->rcvsize * xprt->max_reqs * 2; in xs_udp_do_set_buffer_size()
1673 sk->sk_sndbuf = transport->sndsize * xprt->max_reqs * 2; in xs_udp_do_set_buffer_size()
1686 static void xs_udp_set_buffer_size(struct rpc_xprt *xprt, size_t sndsize, size_t rcvsize) in xs_udp_set_buffer_size() argument
1688 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_udp_set_buffer_size()
1697 xs_udp_do_set_buffer_size(xprt); in xs_udp_set_buffer_size()
1706 static void xs_udp_timer(struct rpc_xprt *xprt, struct rpc_task *task) in xs_udp_timer() argument
1708 xprt_adjust_cwnd(xprt, task, -ETIMEDOUT); in xs_udp_timer()
1758 static void xs_set_port(struct rpc_xprt *xprt, unsigned short port) in xs_set_port() argument
1760 dprintk("RPC: setting port for xprt %p to %u\n", xprt, port); in xs_set_port()
1762 rpc_set_port(xs_addr(xprt), port); in xs_set_port()
1763 xs_update_peer_port(xprt); in xs_set_port()
1776 if (port == 0 && transport->xprt.resvport) in xs_get_srcport()
1785 if (!transport->xprt.resvport) in xs_next_srcport()
1816 memcpy(&myaddr, &transport->srcaddr, transport->xprt.addrlen); in xs_bind()
1820 transport->xprt.addrlen); in xs_bind()
1852 static void xs_local_set_port(struct rpc_xprt *xprt, unsigned short port) in xs_local_set_port() argument
1924 static struct socket *xs_create_sock(struct rpc_xprt *xprt, in xs_create_sock() argument
1931 err = __sock_create(xprt->xprt_net, family, type, protocol, &sock, 1); in xs_create_sock()
1953 static int xs_local_finish_connecting(struct rpc_xprt *xprt, in xs_local_finish_connecting() argument
1956 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, in xs_local_finish_connecting()
1957 xprt); in xs_local_finish_connecting()
1966 sk->sk_user_data = xprt; in xs_local_finish_connecting()
1972 xprt_clear_connected(xprt); in xs_local_finish_connecting()
1982 xprt->stat.connect_count++; in xs_local_finish_connecting()
1983 xprt->stat.connect_start = jiffies; in xs_local_finish_connecting()
1984 return kernel_connect(sock, xs_addr(xprt), xprt->addrlen, 0); in xs_local_finish_connecting()
1993 struct rpc_xprt *xprt = &transport->xprt; in xs_local_setup_socket() local
1997 status = __sock_create(xprt->xprt_net, AF_LOCAL, in xs_local_setup_socket()
2007 xprt, xprt->address_strings[RPC_DISPLAY_ADDR]); in xs_local_setup_socket()
2009 status = xs_local_finish_connecting(xprt, sock); in xs_local_setup_socket()
2010 trace_rpc_socket_connect(xprt, sock, status); in xs_local_setup_socket()
2014 xprt, xprt->address_strings[RPC_DISPLAY_ADDR]); in xs_local_setup_socket()
2015 xprt_set_connected(xprt); in xs_local_setup_socket()
2020 xprt, xprt->address_strings[RPC_DISPLAY_ADDR]); in xs_local_setup_socket()
2024 xprt, xprt->address_strings[RPC_DISPLAY_ADDR]); in xs_local_setup_socket()
2029 xprt->address_strings[RPC_DISPLAY_ADDR]); in xs_local_setup_socket()
2033 xprt_clear_connecting(xprt); in xs_local_setup_socket()
2034 xprt_wake_pending_tasks(xprt, status); in xs_local_setup_socket()
2038 static void xs_local_connect(struct rpc_xprt *xprt, struct rpc_task *task) in xs_local_connect() argument
2040 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_local_connect()
2067 static void xs_set_memalloc(struct rpc_xprt *xprt) in xs_set_memalloc() argument
2069 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, in xs_set_memalloc()
2070 xprt); in xs_set_memalloc()
2078 if (atomic_read(&xprt->swapper)) in xs_set_memalloc()
2090 xs_enable_swap(struct rpc_xprt *xprt) in xs_enable_swap() argument
2092 struct sock_xprt *xs = container_of(xprt, struct sock_xprt, xprt); in xs_enable_swap()
2094 if (atomic_inc_return(&xprt->swapper) != 1) in xs_enable_swap()
2096 if (wait_on_bit_lock(&xprt->state, XPRT_LOCKED, TASK_KILLABLE)) in xs_enable_swap()
2100 xprt_release_xprt(xprt, NULL); in xs_enable_swap()
2112 xs_disable_swap(struct rpc_xprt *xprt) in xs_disable_swap() argument
2114 struct sock_xprt *xs = container_of(xprt, struct sock_xprt, xprt); in xs_disable_swap()
2116 if (!atomic_dec_and_test(&xprt->swapper)) in xs_disable_swap()
2118 if (wait_on_bit_lock(&xprt->state, XPRT_LOCKED, TASK_KILLABLE)) in xs_disable_swap()
2122 xprt_release_xprt(xprt, NULL); in xs_disable_swap()
2125 static void xs_set_memalloc(struct rpc_xprt *xprt) in xs_set_memalloc() argument
2130 xs_enable_swap(struct rpc_xprt *xprt) in xs_enable_swap() argument
2136 xs_disable_swap(struct rpc_xprt *xprt) in xs_disable_swap() argument
2141 static void xs_udp_finish_connecting(struct rpc_xprt *xprt, struct socket *sock) in xs_udp_finish_connecting() argument
2143 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_udp_finish_connecting()
2152 sk->sk_user_data = xprt; in xs_udp_finish_connecting()
2157 xprt_set_connected(xprt); in xs_udp_finish_connecting()
2163 xs_set_memalloc(xprt); in xs_udp_finish_connecting()
2167 xs_udp_do_set_buffer_size(xprt); in xs_udp_finish_connecting()
2174 struct rpc_xprt *xprt = &transport->xprt; in xs_udp_setup_socket() local
2178 sock = xs_create_sock(xprt, transport, in xs_udp_setup_socket()
2179 xs_addr(xprt)->sa_family, SOCK_DGRAM, in xs_udp_setup_socket()
2185 "%s (port %s)\n", xprt, in xs_udp_setup_socket()
2186 xprt->address_strings[RPC_DISPLAY_PROTO], in xs_udp_setup_socket()
2187 xprt->address_strings[RPC_DISPLAY_ADDR], in xs_udp_setup_socket()
2188 xprt->address_strings[RPC_DISPLAY_PORT]); in xs_udp_setup_socket()
2190 xs_udp_finish_connecting(xprt, sock); in xs_udp_setup_socket()
2191 trace_rpc_socket_connect(xprt, sock, 0); in xs_udp_setup_socket()
2194 xprt_unlock_connect(xprt, transport); in xs_udp_setup_socket()
2195 xprt_clear_connecting(xprt); in xs_udp_setup_socket()
2196 xprt_wake_pending_tasks(xprt, status); in xs_udp_setup_socket()
2206 static void xs_tcp_shutdown(struct rpc_xprt *xprt) in xs_tcp_shutdown() argument
2208 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_tcp_shutdown()
2213 if (xprt_connected(xprt)) { in xs_tcp_shutdown()
2215 trace_rpc_socket_shutdown(xprt, sock); in xs_tcp_shutdown()
2220 static int xs_tcp_finish_connecting(struct rpc_xprt *xprt, struct socket *sock) in xs_tcp_finish_connecting() argument
2222 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_tcp_finish_connecting()
2227 unsigned int keepidle = xprt->timeout->to_initval / HZ; in xs_tcp_finish_connecting()
2228 unsigned int keepcnt = xprt->timeout->to_retries + 1; in xs_tcp_finish_connecting()
2243 timeo = jiffies_to_msecs(xprt->timeout->to_initval) * in xs_tcp_finish_connecting()
2244 (xprt->timeout->to_retries + 1); in xs_tcp_finish_connecting()
2252 sk->sk_user_data = xprt; in xs_tcp_finish_connecting()
2263 xprt_clear_connected(xprt); in xs_tcp_finish_connecting()
2272 if (!xprt_bound(xprt)) in xs_tcp_finish_connecting()
2275 xs_set_memalloc(xprt); in xs_tcp_finish_connecting()
2278 xprt->stat.connect_count++; in xs_tcp_finish_connecting()
2279 xprt->stat.connect_start = jiffies; in xs_tcp_finish_connecting()
2281 ret = kernel_connect(sock, xs_addr(xprt), xprt->addrlen, O_NONBLOCK); in xs_tcp_finish_connecting()
2287 if (xprt->reestablish_timeout < XS_TCP_INIT_REEST_TO) in xs_tcp_finish_connecting()
2288 xprt->reestablish_timeout = XS_TCP_INIT_REEST_TO; in xs_tcp_finish_connecting()
2304 struct rpc_xprt *xprt = &transport->xprt; in xs_tcp_setup_socket() local
2308 sock = xs_create_sock(xprt, transport, in xs_tcp_setup_socket()
2309 xs_addr(xprt)->sa_family, SOCK_STREAM, in xs_tcp_setup_socket()
2318 "%s (port %s)\n", xprt, in xs_tcp_setup_socket()
2319 xprt->address_strings[RPC_DISPLAY_PROTO], in xs_tcp_setup_socket()
2320 xprt->address_strings[RPC_DISPLAY_ADDR], in xs_tcp_setup_socket()
2321 xprt->address_strings[RPC_DISPLAY_PORT]); in xs_tcp_setup_socket()
2323 status = xs_tcp_finish_connecting(xprt, sock); in xs_tcp_setup_socket()
2324 trace_rpc_socket_connect(xprt, sock, status); in xs_tcp_setup_socket()
2326 xprt, -status, xprt_connected(xprt), in xs_tcp_setup_socket()
2336 xs_tcp_force_close(xprt); in xs_tcp_setup_socket()
2341 xprt_unlock_connect(xprt, transport); in xs_tcp_setup_socket()
2353 xs_tcp_force_close(xprt); in xs_tcp_setup_socket()
2358 xprt_unlock_connect(xprt, transport); in xs_tcp_setup_socket()
2359 xprt_clear_connecting(xprt); in xs_tcp_setup_socket()
2360 xprt_wake_pending_tasks(xprt, status); in xs_tcp_setup_socket()
2377 static void xs_connect(struct rpc_xprt *xprt, struct rpc_task *task) in xs_connect() argument
2379 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_connect()
2381 WARN_ON_ONCE(!xprt_lock_connect(xprt, task, transport)); in xs_connect()
2386 xprt, xprt->reestablish_timeout / HZ); in xs_connect()
2393 xprt->reestablish_timeout); in xs_connect()
2394 xprt->reestablish_timeout <<= 1; in xs_connect()
2395 if (xprt->reestablish_timeout < XS_TCP_INIT_REEST_TO) in xs_connect()
2396 xprt->reestablish_timeout = XS_TCP_INIT_REEST_TO; in xs_connect()
2397 if (xprt->reestablish_timeout > XS_TCP_MAX_REEST_TO) in xs_connect()
2398 xprt->reestablish_timeout = XS_TCP_MAX_REEST_TO; in xs_connect()
2400 dprintk("RPC: xs_connect scheduled xprt %p\n", xprt); in xs_connect()
2412 static void xs_local_print_stats(struct rpc_xprt *xprt, struct seq_file *seq) in xs_local_print_stats() argument
2416 if (xprt_connected(xprt)) in xs_local_print_stats()
2417 idle_time = (long)(jiffies - xprt->last_used) / HZ; in xs_local_print_stats()
2421 xprt->stat.bind_count, in xs_local_print_stats()
2422 xprt->stat.connect_count, in xs_local_print_stats()
2423 xprt->stat.connect_time, in xs_local_print_stats()
2425 xprt->stat.sends, in xs_local_print_stats()
2426 xprt->stat.recvs, in xs_local_print_stats()
2427 xprt->stat.bad_xids, in xs_local_print_stats()
2428 xprt->stat.req_u, in xs_local_print_stats()
2429 xprt->stat.bklog_u, in xs_local_print_stats()
2430 xprt->stat.max_slots, in xs_local_print_stats()
2431 xprt->stat.sending_u, in xs_local_print_stats()
2432 xprt->stat.pending_u); in xs_local_print_stats()
2441 static void xs_udp_print_stats(struct rpc_xprt *xprt, struct seq_file *seq) in xs_udp_print_stats() argument
2443 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_udp_print_stats()
2448 xprt->stat.bind_count, in xs_udp_print_stats()
2449 xprt->stat.sends, in xs_udp_print_stats()
2450 xprt->stat.recvs, in xs_udp_print_stats()
2451 xprt->stat.bad_xids, in xs_udp_print_stats()
2452 xprt->stat.req_u, in xs_udp_print_stats()
2453 xprt->stat.bklog_u, in xs_udp_print_stats()
2454 xprt->stat.max_slots, in xs_udp_print_stats()
2455 xprt->stat.sending_u, in xs_udp_print_stats()
2456 xprt->stat.pending_u); in xs_udp_print_stats()
2465 static void xs_tcp_print_stats(struct rpc_xprt *xprt, struct seq_file *seq) in xs_tcp_print_stats() argument
2467 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_tcp_print_stats()
2470 if (xprt_connected(xprt)) in xs_tcp_print_stats()
2471 idle_time = (long)(jiffies - xprt->last_used) / HZ; in xs_tcp_print_stats()
2476 xprt->stat.bind_count, in xs_tcp_print_stats()
2477 xprt->stat.connect_count, in xs_tcp_print_stats()
2478 xprt->stat.connect_time, in xs_tcp_print_stats()
2480 xprt->stat.sends, in xs_tcp_print_stats()
2481 xprt->stat.recvs, in xs_tcp_print_stats()
2482 xprt->stat.bad_xids, in xs_tcp_print_stats()
2483 xprt->stat.req_u, in xs_tcp_print_stats()
2484 xprt->stat.bklog_u, in xs_tcp_print_stats()
2485 xprt->stat.max_slots, in xs_tcp_print_stats()
2486 xprt->stat.sending_u, in xs_tcp_print_stats()
2487 xprt->stat.pending_u); in xs_tcp_print_stats()
2536 struct rpc_xprt *xprt = req->rq_xprt; in bc_sendto() local
2538 container_of(xprt, struct sock_xprt, xprt); in bc_sendto()
2565 struct svc_xprt *xprt; in bc_send_request() local
2572 xprt = req->rq_xprt->bc_xprt; in bc_send_request()
2578 if (!mutex_trylock(&xprt->xpt_mutex)) { in bc_send_request()
2579 rpc_sleep_on(&xprt->xpt_bc_pending, task, NULL); in bc_send_request()
2580 if (!mutex_trylock(&xprt->xpt_mutex)) in bc_send_request()
2582 rpc_wake_up_queued_task(&xprt->xpt_bc_pending, task); in bc_send_request()
2584 if (test_bit(XPT_DEAD, &xprt->xpt_flags)) in bc_send_request()
2588 mutex_unlock(&xprt->xpt_mutex); in bc_send_request()
2600 static void bc_close(struct rpc_xprt *xprt) in bc_close() argument
2609 static void bc_destroy(struct rpc_xprt *xprt) in bc_destroy() argument
2611 dprintk("RPC: bc_destroy xprt %p\n", xprt); in bc_destroy()
2613 xs_xprt_free(xprt); in bc_destroy()
2733 struct rpc_xprt *xprt; in xs_setup_xprt() local
2736 if (args->addrlen > sizeof(xprt->addr)) { in xs_setup_xprt()
2741 xprt = xprt_alloc(args->net, sizeof(*new), slot_table_size, in xs_setup_xprt()
2743 if (xprt == NULL) { in xs_setup_xprt()
2749 new = container_of(xprt, struct sock_xprt, xprt); in xs_setup_xprt()
2751 memcpy(&xprt->addr, args->dstaddr, args->addrlen); in xs_setup_xprt()
2752 xprt->addrlen = args->addrlen; in xs_setup_xprt()
2760 xprt_free(xprt); in xs_setup_xprt()
2765 return xprt; in xs_setup_xprt()
2784 struct rpc_xprt *xprt; in xs_setup_local() local
2787 xprt = xs_setup_xprt(args, xprt_tcp_slot_table_entries, in xs_setup_local()
2789 if (IS_ERR(xprt)) in xs_setup_local()
2790 return xprt; in xs_setup_local()
2791 transport = container_of(xprt, struct sock_xprt, xprt); in xs_setup_local()
2793 xprt->prot = 0; in xs_setup_local()
2794 xprt->tsh_size = sizeof(rpc_fraghdr) / sizeof(u32); in xs_setup_local()
2795 xprt->max_payload = RPC_MAX_FRAGMENT_SIZE; in xs_setup_local()
2797 xprt->bind_timeout = XS_BIND_TO; in xs_setup_local()
2798 xprt->reestablish_timeout = XS_TCP_INIT_REEST_TO; in xs_setup_local()
2799 xprt->idle_timeout = XS_IDLE_DISC_TO; in xs_setup_local()
2801 xprt->ops = &xs_local_ops; in xs_setup_local()
2802 xprt->timeout = &xs_local_default_timeout; in xs_setup_local()
2816 xprt_set_bound(xprt); in xs_setup_local()
2817 xs_format_peer_addresses(xprt, "local", RPCBIND_NETID_LOCAL); in xs_setup_local()
2828 xprt->address_strings[RPC_DISPLAY_ADDR]); in xs_setup_local()
2831 return xprt; in xs_setup_local()
2834 xs_xprt_free(xprt); in xs_setup_local()
2853 struct rpc_xprt *xprt; in xs_setup_udp() local
2857 xprt = xs_setup_xprt(args, xprt_udp_slot_table_entries, in xs_setup_udp()
2859 if (IS_ERR(xprt)) in xs_setup_udp()
2860 return xprt; in xs_setup_udp()
2861 transport = container_of(xprt, struct sock_xprt, xprt); in xs_setup_udp()
2863 xprt->prot = IPPROTO_UDP; in xs_setup_udp()
2864 xprt->tsh_size = 0; in xs_setup_udp()
2866 xprt->max_payload = (1U << 16) - (MAX_HEADER << 3); in xs_setup_udp()
2868 xprt->bind_timeout = XS_BIND_TO; in xs_setup_udp()
2869 xprt->reestablish_timeout = XS_UDP_REEST_TO; in xs_setup_udp()
2870 xprt->idle_timeout = XS_IDLE_DISC_TO; in xs_setup_udp()
2872 xprt->ops = &xs_udp_ops; in xs_setup_udp()
2874 xprt->timeout = &xs_udp_default_timeout; in xs_setup_udp()
2882 xprt_set_bound(xprt); in xs_setup_udp()
2884 xs_format_peer_addresses(xprt, "udp", RPCBIND_NETID_UDP); in xs_setup_udp()
2888 xprt_set_bound(xprt); in xs_setup_udp()
2890 xs_format_peer_addresses(xprt, "udp", RPCBIND_NETID_UDP6); in xs_setup_udp()
2897 if (xprt_bound(xprt)) in xs_setup_udp()
2899 xprt->address_strings[RPC_DISPLAY_ADDR], in xs_setup_udp()
2900 xprt->address_strings[RPC_DISPLAY_PORT], in xs_setup_udp()
2901 xprt->address_strings[RPC_DISPLAY_PROTO]); in xs_setup_udp()
2904 xprt->address_strings[RPC_DISPLAY_ADDR], in xs_setup_udp()
2905 xprt->address_strings[RPC_DISPLAY_PROTO]); in xs_setup_udp()
2908 return xprt; in xs_setup_udp()
2911 xs_xprt_free(xprt); in xs_setup_udp()
2929 struct rpc_xprt *xprt; in xs_setup_tcp() local
2937 xprt = xs_setup_xprt(args, xprt_tcp_slot_table_entries, in xs_setup_tcp()
2939 if (IS_ERR(xprt)) in xs_setup_tcp()
2940 return xprt; in xs_setup_tcp()
2941 transport = container_of(xprt, struct sock_xprt, xprt); in xs_setup_tcp()
2943 xprt->prot = IPPROTO_TCP; in xs_setup_tcp()
2944 xprt->tsh_size = sizeof(rpc_fraghdr) / sizeof(u32); in xs_setup_tcp()
2945 xprt->max_payload = RPC_MAX_FRAGMENT_SIZE; in xs_setup_tcp()
2947 xprt->bind_timeout = XS_BIND_TO; in xs_setup_tcp()
2948 xprt->reestablish_timeout = XS_TCP_INIT_REEST_TO; in xs_setup_tcp()
2949 xprt->idle_timeout = XS_IDLE_DISC_TO; in xs_setup_tcp()
2951 xprt->ops = &xs_tcp_ops; in xs_setup_tcp()
2952 xprt->timeout = &xs_tcp_default_timeout; in xs_setup_tcp()
2960 xprt_set_bound(xprt); in xs_setup_tcp()
2962 xs_format_peer_addresses(xprt, "tcp", RPCBIND_NETID_TCP); in xs_setup_tcp()
2966 xprt_set_bound(xprt); in xs_setup_tcp()
2968 xs_format_peer_addresses(xprt, "tcp", RPCBIND_NETID_TCP6); in xs_setup_tcp()
2975 if (xprt_bound(xprt)) in xs_setup_tcp()
2977 xprt->address_strings[RPC_DISPLAY_ADDR], in xs_setup_tcp()
2978 xprt->address_strings[RPC_DISPLAY_PORT], in xs_setup_tcp()
2979 xprt->address_strings[RPC_DISPLAY_PROTO]); in xs_setup_tcp()
2982 xprt->address_strings[RPC_DISPLAY_ADDR], in xs_setup_tcp()
2983 xprt->address_strings[RPC_DISPLAY_PROTO]); in xs_setup_tcp()
2986 return xprt; in xs_setup_tcp()
2989 xs_xprt_free(xprt); in xs_setup_tcp()
3001 struct rpc_xprt *xprt; in xs_setup_bc_tcp() local
3006 xprt = xs_setup_xprt(args, xprt_tcp_slot_table_entries, in xs_setup_bc_tcp()
3008 if (IS_ERR(xprt)) in xs_setup_bc_tcp()
3009 return xprt; in xs_setup_bc_tcp()
3010 transport = container_of(xprt, struct sock_xprt, xprt); in xs_setup_bc_tcp()
3012 xprt->prot = IPPROTO_TCP; in xs_setup_bc_tcp()
3013 xprt->tsh_size = sizeof(rpc_fraghdr) / sizeof(u32); in xs_setup_bc_tcp()
3014 xprt->max_payload = RPC_MAX_FRAGMENT_SIZE; in xs_setup_bc_tcp()
3015 xprt->timeout = &xs_tcp_default_timeout; in xs_setup_bc_tcp()
3018 xprt_set_bound(xprt); in xs_setup_bc_tcp()
3019 xprt->bind_timeout = 0; in xs_setup_bc_tcp()
3020 xprt->reestablish_timeout = 0; in xs_setup_bc_tcp()
3021 xprt->idle_timeout = 0; in xs_setup_bc_tcp()
3023 xprt->ops = &bc_tcp_ops; in xs_setup_bc_tcp()
3027 xs_format_peer_addresses(xprt, "tcp", in xs_setup_bc_tcp()
3031 xs_format_peer_addresses(xprt, "tcp", in xs_setup_bc_tcp()
3040 xprt->address_strings[RPC_DISPLAY_ADDR], in xs_setup_bc_tcp()
3041 xprt->address_strings[RPC_DISPLAY_PORT], in xs_setup_bc_tcp()
3042 xprt->address_strings[RPC_DISPLAY_PROTO]); in xs_setup_bc_tcp()
3050 xprt_get(xprt); in xs_setup_bc_tcp()
3051 args->bc_xprt->xpt_bc_xprt = xprt; in xs_setup_bc_tcp()
3052 xprt->bc_xprt = args->bc_xprt; in xs_setup_bc_tcp()
3061 xprt_set_connected(xprt); in xs_setup_bc_tcp()
3064 return xprt; in xs_setup_bc_tcp()
3067 xprt_put(xprt); in xs_setup_bc_tcp()
3070 xs_xprt_free(xprt); in xs_setup_bc_tcp()