Lines Matching refs:xprt

60 static void xs_close(struct rpc_xprt *xprt);
61 static void xs_tcp_set_socket_timeouts(struct rpc_xprt *xprt,
232 static inline struct sockaddr *xs_addr(struct rpc_xprt *xprt) in xs_addr() argument
234 return (struct sockaddr *) &xprt->addr; in xs_addr()
237 static inline struct sockaddr_un *xs_addr_un(struct rpc_xprt *xprt) in xs_addr_un() argument
239 return (struct sockaddr_un *) &xprt->addr; in xs_addr_un()
242 static inline struct sockaddr_in *xs_addr_in(struct rpc_xprt *xprt) in xs_addr_in() argument
244 return (struct sockaddr_in *) &xprt->addr; in xs_addr_in()
247 static inline struct sockaddr_in6 *xs_addr_in6(struct rpc_xprt *xprt) in xs_addr_in6() argument
249 return (struct sockaddr_in6 *) &xprt->addr; in xs_addr_in6()
252 static void xs_format_common_peer_addresses(struct rpc_xprt *xprt) in xs_format_common_peer_addresses() argument
254 struct sockaddr *sap = xs_addr(xprt); in xs_format_common_peer_addresses()
262 sun = xs_addr_un(xprt); in xs_format_common_peer_addresses()
264 xprt->address_strings[RPC_DISPLAY_ADDR] = in xs_format_common_peer_addresses()
269 xprt->address_strings[RPC_DISPLAY_ADDR] = in xs_format_common_peer_addresses()
271 sin = xs_addr_in(xprt); in xs_format_common_peer_addresses()
276 xprt->address_strings[RPC_DISPLAY_ADDR] = in xs_format_common_peer_addresses()
278 sin6 = xs_addr_in6(xprt); in xs_format_common_peer_addresses()
285 xprt->address_strings[RPC_DISPLAY_HEX_ADDR] = kstrdup(buf, GFP_KERNEL); in xs_format_common_peer_addresses()
288 static void xs_format_common_peer_ports(struct rpc_xprt *xprt) in xs_format_common_peer_ports() argument
290 struct sockaddr *sap = xs_addr(xprt); in xs_format_common_peer_ports()
294 xprt->address_strings[RPC_DISPLAY_PORT] = kstrdup(buf, GFP_KERNEL); in xs_format_common_peer_ports()
297 xprt->address_strings[RPC_DISPLAY_HEX_PORT] = kstrdup(buf, GFP_KERNEL); in xs_format_common_peer_ports()
300 static void xs_format_peer_addresses(struct rpc_xprt *xprt, in xs_format_peer_addresses() argument
304 xprt->address_strings[RPC_DISPLAY_PROTO] = protocol; in xs_format_peer_addresses()
305 xprt->address_strings[RPC_DISPLAY_NETID] = netid; in xs_format_peer_addresses()
306 xs_format_common_peer_addresses(xprt); in xs_format_peer_addresses()
307 xs_format_common_peer_ports(xprt); in xs_format_peer_addresses()
310 static void xs_update_peer_port(struct rpc_xprt *xprt) in xs_update_peer_port() argument
312 kfree(xprt->address_strings[RPC_DISPLAY_HEX_PORT]); in xs_update_peer_port()
313 kfree(xprt->address_strings[RPC_DISPLAY_PORT]); in xs_update_peer_port()
315 xs_format_common_peer_ports(xprt); in xs_update_peer_port()
318 static void xs_free_peer_addresses(struct rpc_xprt *xprt) in xs_free_peer_addresses() argument
328 kfree(xprt->address_strings[i]); in xs_free_peer_addresses()
562 struct rpc_xprt *xprt = &transport->xprt; in xs_read_stream_call() local
567 if (!xprt->bc_serv) in xs_read_stream_call()
571 req = xprt_lookup_bc_request(xprt, transport->recv.xid); in xs_read_stream_call()
598 struct rpc_xprt *xprt = &transport->xprt; in xs_read_stream_reply() local
603 spin_lock(&xprt->queue_lock); in xs_read_stream_reply()
604 req = xprt_lookup_rqst(xprt, transport->recv.xid); in xs_read_stream_reply()
610 spin_unlock(&xprt->queue_lock); in xs_read_stream_reply()
614 spin_lock(&xprt->queue_lock); in xs_read_stream_reply()
621 spin_unlock(&xprt->queue_lock); in xs_read_stream_reply()
732 trace_xs_stream_read_data(&transport->xprt, ret, read); in xs_stream_data_receive()
757 transport->xprt.stat.connect_count++; in xs_stream_start_connect()
758 transport->xprt.stat.connect_start = jiffies; in xs_stream_start_connect()
770 struct rpc_xprt *xprt = req->rq_xprt; in xs_nospace() local
771 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_nospace()
778 spin_lock(&xprt->transport_lock); in xs_nospace()
781 if (xprt_connected(xprt)) { in xs_nospace()
784 xprt_wait_for_buffer_space(xprt); in xs_nospace()
788 spin_unlock(&xprt->transport_lock); in xs_nospace()
845 struct rpc_xprt *xprt = req->rq_xprt; in xs_local_send_request() local
847 container_of(xprt, struct sock_xprt, xprt); in xs_local_send_request()
859 xs_close(xprt); in xs_local_send_request()
897 xs_close(xprt); in xs_local_send_request()
917 struct rpc_xprt *xprt = req->rq_xprt; in xs_udp_send_request() local
918 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_udp_send_request()
921 .msg_name = xs_addr(xprt), in xs_udp_send_request()
922 .msg_namelen = xprt->addrlen, in xs_udp_send_request()
932 if (!xprt_bound(xprt)) in xs_udp_send_request()
935 if (!xprt_request_get_cong(xprt, req)) in xs_udp_send_request()
1000 struct rpc_xprt *xprt = req->rq_xprt; in xs_tcp_send_request() local
1001 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_tcp_send_request()
1026 xs_tcp_set_socket_timeouts(xprt, transport->sock); in xs_tcp_send_request()
1047 if (atomic_long_read(&xprt->xmit_queuelen) == 1) in xs_tcp_send_request()
1119 static void xs_sock_reset_state_flags(struct rpc_xprt *xprt) in xs_sock_reset_state_flags() argument
1121 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_sock_reset_state_flags()
1135 static void xs_sock_reset_connection_flags(struct rpc_xprt *xprt) in xs_sock_reset_connection_flags() argument
1137 xprt->connect_cookie++; in xs_sock_reset_connection_flags()
1139 clear_bit(XPRT_CLOSE_WAIT, &xprt->state); in xs_sock_reset_connection_flags()
1140 clear_bit(XPRT_CLOSING, &xprt->state); in xs_sock_reset_connection_flags()
1141 xs_sock_reset_state_flags(xprt); in xs_sock_reset_connection_flags()
1155 struct rpc_xprt *xprt; in xs_error_report() local
1157 if (!(xprt = xprt_from_sock(sk))) in xs_error_report()
1160 transport = container_of(xprt, struct sock_xprt, xprt); in xs_error_report()
1165 xprt, -transport->xprt_err); in xs_error_report()
1166 trace_rpc_socket_error(xprt, sk->sk_socket, transport->xprt_err); in xs_error_report()
1177 struct rpc_xprt *xprt = &transport->xprt; in xs_reset_transport() local
1183 if (atomic_read(&transport->xprt.swapper)) in xs_reset_transport()
1197 xprt_clear_connected(xprt); in xs_reset_transport()
1198 xs_sock_reset_connection_flags(xprt); in xs_reset_transport()
1204 trace_rpc_socket_close(xprt, sock); in xs_reset_transport()
1207 xprt_disconnect_done(xprt); in xs_reset_transport()
1220 static void xs_close(struct rpc_xprt *xprt) in xs_close() argument
1222 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_close()
1224 dprintk("RPC: xs_close xprt %p\n", xprt); in xs_close()
1227 xprt->reestablish_timeout = 0; in xs_close()
1230 static void xs_inject_disconnect(struct rpc_xprt *xprt) in xs_inject_disconnect() argument
1233 xprt); in xs_inject_disconnect()
1234 xprt_disconnect_done(xprt); in xs_inject_disconnect()
1237 static void xs_xprt_free(struct rpc_xprt *xprt) in xs_xprt_free() argument
1239 xs_free_peer_addresses(xprt); in xs_xprt_free()
1240 xprt_free(xprt); in xs_xprt_free()
1248 static void xs_destroy(struct rpc_xprt *xprt) in xs_destroy() argument
1250 struct sock_xprt *transport = container_of(xprt, in xs_destroy()
1251 struct sock_xprt, xprt); in xs_destroy()
1252 dprintk("RPC: xs_destroy xprt %p\n", xprt); in xs_destroy()
1255 xs_close(xprt); in xs_destroy()
1258 xs_xprt_free(xprt); in xs_destroy()
1269 static void xs_udp_data_read_skb(struct rpc_xprt *xprt, in xs_udp_data_read_skb() argument
1291 spin_lock(&xprt->queue_lock); in xs_udp_data_read_skb()
1292 rovr = xprt_lookup_rqst(xprt, *xp); in xs_udp_data_read_skb()
1297 spin_unlock(&xprt->queue_lock); in xs_udp_data_read_skb()
1305 spin_lock(&xprt->queue_lock); in xs_udp_data_read_skb()
1311 spin_lock(&xprt->transport_lock); in xs_udp_data_read_skb()
1312 xprt_adjust_cwnd(xprt, task, copied); in xs_udp_data_read_skb()
1313 spin_unlock(&xprt->transport_lock); in xs_udp_data_read_skb()
1314 spin_lock(&xprt->queue_lock); in xs_udp_data_read_skb()
1320 spin_unlock(&xprt->queue_lock); in xs_udp_data_read_skb()
1337 xs_udp_data_read_skb(&transport->xprt, sk, skb); in xs_udp_data_receive()
1363 struct rpc_xprt *xprt; in xs_data_ready() local
1366 xprt = xprt_from_sock(sk); in xs_data_ready()
1367 if (xprt != NULL) { in xs_data_ready()
1368 struct sock_xprt *transport = container_of(xprt, in xs_data_ready()
1369 struct sock_xprt, xprt); in xs_data_ready()
1374 if (xprt->reestablish_timeout) in xs_data_ready()
1375 xprt->reestablish_timeout = 0; in xs_data_ready()
1385 static void xs_tcp_force_close(struct rpc_xprt *xprt) in xs_tcp_force_close() argument
1387 xprt_force_disconnect(xprt); in xs_tcp_force_close()
1391 static size_t xs_tcp_bc_maxpayload(struct rpc_xprt *xprt) in xs_tcp_bc_maxpayload() argument
1404 struct rpc_xprt *xprt; in xs_tcp_state_change() local
1407 if (!(xprt = xprt_from_sock(sk))) in xs_tcp_state_change()
1409 dprintk("RPC: xs_tcp_state_change client %p...\n", xprt); in xs_tcp_state_change()
1411 sk->sk_state, xprt_connected(xprt), in xs_tcp_state_change()
1416 transport = container_of(xprt, struct sock_xprt, xprt); in xs_tcp_state_change()
1417 trace_rpc_socket_state_change(xprt, sk->sk_socket); in xs_tcp_state_change()
1420 if (!xprt_test_and_set_connected(xprt)) { in xs_tcp_state_change()
1421 xprt->connect_cookie++; in xs_tcp_state_change()
1423 xprt_clear_connecting(xprt); in xs_tcp_state_change()
1425 xprt->stat.connect_count++; in xs_tcp_state_change()
1426 xprt->stat.connect_time += (long)jiffies - in xs_tcp_state_change()
1427 xprt->stat.connect_start; in xs_tcp_state_change()
1433 xprt->connect_cookie++; in xs_tcp_state_change()
1434 xprt->reestablish_timeout = 0; in xs_tcp_state_change()
1435 set_bit(XPRT_CLOSING, &xprt->state); in xs_tcp_state_change()
1437 clear_bit(XPRT_CONNECTED, &xprt->state); in xs_tcp_state_change()
1438 clear_bit(XPRT_CLOSE_WAIT, &xprt->state); in xs_tcp_state_change()
1443 xprt->connect_cookie++; in xs_tcp_state_change()
1444 clear_bit(XPRT_CONNECTED, &xprt->state); in xs_tcp_state_change()
1452 if (xprt->reestablish_timeout < XS_TCP_INIT_REEST_TO) in xs_tcp_state_change()
1453 xprt->reestablish_timeout = XS_TCP_INIT_REEST_TO; in xs_tcp_state_change()
1456 set_bit(XPRT_CLOSING, &xprt->state); in xs_tcp_state_change()
1458 clear_bit(XPRT_CONNECTED, &xprt->state); in xs_tcp_state_change()
1464 xprt_clear_connecting(xprt); in xs_tcp_state_change()
1465 clear_bit(XPRT_CLOSING, &xprt->state); in xs_tcp_state_change()
1475 struct rpc_xprt *xprt; in xs_write_space() local
1481 if (unlikely(!(xprt = xprt_from_sock(sk)))) in xs_write_space()
1483 transport = container_of(xprt, struct sock_xprt, xprt); in xs_write_space()
1529 static void xs_udp_do_set_buffer_size(struct rpc_xprt *xprt) in xs_udp_do_set_buffer_size() argument
1531 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_udp_do_set_buffer_size()
1536 sk->sk_rcvbuf = transport->rcvsize * xprt->max_reqs * 2; in xs_udp_do_set_buffer_size()
1540 sk->sk_sndbuf = transport->sndsize * xprt->max_reqs * 2; in xs_udp_do_set_buffer_size()
1553 static void xs_udp_set_buffer_size(struct rpc_xprt *xprt, size_t sndsize, size_t rcvsize) in xs_udp_set_buffer_size() argument
1555 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_udp_set_buffer_size()
1564 xs_udp_do_set_buffer_size(xprt); in xs_udp_set_buffer_size()
1574 static void xs_udp_timer(struct rpc_xprt *xprt, struct rpc_task *task) in xs_udp_timer() argument
1576 spin_lock(&xprt->transport_lock); in xs_udp_timer()
1577 xprt_adjust_cwnd(xprt, task, -ETIMEDOUT); in xs_udp_timer()
1578 spin_unlock(&xprt->transport_lock); in xs_udp_timer()
1618 static void xs_set_port(struct rpc_xprt *xprt, unsigned short port) in xs_set_port() argument
1620 dprintk("RPC: setting port for xprt %p to %u\n", xprt, port); in xs_set_port()
1622 rpc_set_port(xs_addr(xprt), port); in xs_set_port()
1623 xs_update_peer_port(xprt); in xs_set_port()
1628 if (transport->srcport == 0 && transport->xprt.reuseport) in xs_set_srcport()
1636 if (port == 0 && transport->xprt.resvport) in xs_get_srcport()
1641 unsigned short get_srcport(struct rpc_xprt *xprt) in get_srcport() argument
1643 struct sock_xprt *sock = container_of(xprt, struct sock_xprt, xprt); in get_srcport()
1652 if (!transport->xprt.resvport) in xs_next_srcport()
1683 memcpy(&myaddr, &transport->srcaddr, transport->xprt.addrlen); in xs_bind()
1687 transport->xprt.addrlen); in xs_bind()
1689 if (transport->xprt.reuseport) in xs_bind()
1718 static void xs_local_set_port(struct rpc_xprt *xprt, unsigned short port) in xs_local_set_port() argument
1777 static struct socket *xs_create_sock(struct rpc_xprt *xprt, in xs_create_sock() argument
1785 err = __sock_create(xprt->xprt_net, family, type, protocol, &sock, 1); in xs_create_sock()
1812 static int xs_local_finish_connecting(struct rpc_xprt *xprt, in xs_local_finish_connecting() argument
1815 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, in xs_local_finish_connecting()
1816 xprt); in xs_local_finish_connecting()
1825 sk->sk_user_data = xprt; in xs_local_finish_connecting()
1831 xprt_clear_connected(xprt); in xs_local_finish_connecting()
1842 return kernel_connect(sock, xs_addr(xprt), xprt->addrlen, 0); in xs_local_finish_connecting()
1851 struct rpc_xprt *xprt = &transport->xprt; in xs_local_setup_socket() local
1856 status = __sock_create(xprt->xprt_net, AF_LOCAL, in xs_local_setup_socket()
1873 xprt, xprt->address_strings[RPC_DISPLAY_ADDR]); in xs_local_setup_socket()
1875 status = xs_local_finish_connecting(xprt, sock); in xs_local_setup_socket()
1876 trace_rpc_socket_connect(xprt, sock, status); in xs_local_setup_socket()
1880 xprt, xprt->address_strings[RPC_DISPLAY_ADDR]); in xs_local_setup_socket()
1881 xprt->stat.connect_count++; in xs_local_setup_socket()
1882 xprt->stat.connect_time += (long)jiffies - in xs_local_setup_socket()
1883 xprt->stat.connect_start; in xs_local_setup_socket()
1884 xprt_set_connected(xprt); in xs_local_setup_socket()
1890 xprt, xprt->address_strings[RPC_DISPLAY_ADDR]); in xs_local_setup_socket()
1894 xprt, xprt->address_strings[RPC_DISPLAY_ADDR]); in xs_local_setup_socket()
1899 xprt->address_strings[RPC_DISPLAY_ADDR]); in xs_local_setup_socket()
1903 xprt_clear_connecting(xprt); in xs_local_setup_socket()
1904 xprt_wake_pending_tasks(xprt, status); in xs_local_setup_socket()
1908 static void xs_local_connect(struct rpc_xprt *xprt, struct rpc_task *task) in xs_local_connect() argument
1910 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_local_connect()
1938 static void xs_set_memalloc(struct rpc_xprt *xprt) in xs_set_memalloc() argument
1940 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, in xs_set_memalloc()
1941 xprt); in xs_set_memalloc()
1949 if (atomic_read(&xprt->swapper)) in xs_set_memalloc()
1961 xs_enable_swap(struct rpc_xprt *xprt) in xs_enable_swap() argument
1963 struct sock_xprt *xs = container_of(xprt, struct sock_xprt, xprt); in xs_enable_swap()
1965 if (atomic_inc_return(&xprt->swapper) != 1) in xs_enable_swap()
1967 if (wait_on_bit_lock(&xprt->state, XPRT_LOCKED, TASK_KILLABLE)) in xs_enable_swap()
1971 xprt_release_xprt(xprt, NULL); in xs_enable_swap()
1983 xs_disable_swap(struct rpc_xprt *xprt) in xs_disable_swap() argument
1985 struct sock_xprt *xs = container_of(xprt, struct sock_xprt, xprt); in xs_disable_swap()
1987 if (!atomic_dec_and_test(&xprt->swapper)) in xs_disable_swap()
1989 if (wait_on_bit_lock(&xprt->state, XPRT_LOCKED, TASK_KILLABLE)) in xs_disable_swap()
1993 xprt_release_xprt(xprt, NULL); in xs_disable_swap()
1996 static void xs_set_memalloc(struct rpc_xprt *xprt) in xs_set_memalloc() argument
2001 xs_enable_swap(struct rpc_xprt *xprt) in xs_enable_swap() argument
2007 xs_disable_swap(struct rpc_xprt *xprt) in xs_disable_swap() argument
2012 static void xs_udp_finish_connecting(struct rpc_xprt *xprt, struct socket *sock) in xs_udp_finish_connecting() argument
2014 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_udp_finish_connecting()
2023 sk->sk_user_data = xprt; in xs_udp_finish_connecting()
2028 xprt_set_connected(xprt); in xs_udp_finish_connecting()
2034 xs_set_memalloc(xprt); in xs_udp_finish_connecting()
2038 xs_udp_do_set_buffer_size(xprt); in xs_udp_finish_connecting()
2040 xprt->stat.connect_start = jiffies; in xs_udp_finish_connecting()
2047 struct rpc_xprt *xprt = &transport->xprt; in xs_udp_setup_socket() local
2051 sock = xs_create_sock(xprt, transport, in xs_udp_setup_socket()
2052 xs_addr(xprt)->sa_family, SOCK_DGRAM, in xs_udp_setup_socket()
2058 "%s (port %s)\n", xprt, in xs_udp_setup_socket()
2059 xprt->address_strings[RPC_DISPLAY_PROTO], in xs_udp_setup_socket()
2060 xprt->address_strings[RPC_DISPLAY_ADDR], in xs_udp_setup_socket()
2061 xprt->address_strings[RPC_DISPLAY_PORT]); in xs_udp_setup_socket()
2063 xs_udp_finish_connecting(xprt, sock); in xs_udp_setup_socket()
2064 trace_rpc_socket_connect(xprt, sock, 0); in xs_udp_setup_socket()
2067 xprt_clear_connecting(xprt); in xs_udp_setup_socket()
2068 xprt_unlock_connect(xprt, transport); in xs_udp_setup_socket()
2069 xprt_wake_pending_tasks(xprt, status); in xs_udp_setup_socket()
2079 static void xs_tcp_shutdown(struct rpc_xprt *xprt) in xs_tcp_shutdown() argument
2081 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_tcp_shutdown()
2087 if (!xprt->reuseport) { in xs_tcp_shutdown()
2088 xs_close(xprt); in xs_tcp_shutdown()
2098 trace_rpc_socket_shutdown(xprt, sock); in xs_tcp_shutdown()
2105 static void xs_tcp_set_socket_timeouts(struct rpc_xprt *xprt, in xs_tcp_set_socket_timeouts() argument
2108 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_tcp_set_socket_timeouts()
2113 spin_lock(&xprt->transport_lock); in xs_tcp_set_socket_timeouts()
2114 keepidle = DIV_ROUND_UP(xprt->timeout->to_initval, HZ); in xs_tcp_set_socket_timeouts()
2115 keepcnt = xprt->timeout->to_retries + 1; in xs_tcp_set_socket_timeouts()
2116 timeo = jiffies_to_msecs(xprt->timeout->to_initval) * in xs_tcp_set_socket_timeouts()
2117 (xprt->timeout->to_retries + 1); in xs_tcp_set_socket_timeouts()
2119 spin_unlock(&xprt->transport_lock); in xs_tcp_set_socket_timeouts()
2131 static void xs_tcp_set_connect_timeout(struct rpc_xprt *xprt, in xs_tcp_set_connect_timeout() argument
2135 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_tcp_set_connect_timeout()
2139 spin_lock(&xprt->transport_lock); in xs_tcp_set_connect_timeout()
2140 if (reconnect_timeout < xprt->max_reconnect_timeout) in xs_tcp_set_connect_timeout()
2141 xprt->max_reconnect_timeout = reconnect_timeout; in xs_tcp_set_connect_timeout()
2142 if (connect_timeout < xprt->connect_timeout) { in xs_tcp_set_connect_timeout()
2143 memcpy(&to, xprt->timeout, sizeof(to)); in xs_tcp_set_connect_timeout()
2152 xprt->timeout = &transport->tcp_timeout; in xs_tcp_set_connect_timeout()
2153 xprt->connect_timeout = connect_timeout; in xs_tcp_set_connect_timeout()
2156 spin_unlock(&xprt->transport_lock); in xs_tcp_set_connect_timeout()
2159 static int xs_tcp_finish_connecting(struct rpc_xprt *xprt, struct socket *sock) in xs_tcp_finish_connecting() argument
2161 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_tcp_finish_connecting()
2173 if (xs_addr(xprt)->sa_family == PF_INET6) { in xs_tcp_finish_connecting()
2178 xs_tcp_set_socket_timeouts(xprt, sock); in xs_tcp_finish_connecting()
2185 sk->sk_user_data = xprt; in xs_tcp_finish_connecting()
2195 xprt_clear_connected(xprt); in xs_tcp_finish_connecting()
2204 if (!xprt_bound(xprt)) in xs_tcp_finish_connecting()
2207 xs_set_memalloc(xprt); in xs_tcp_finish_connecting()
2213 return kernel_connect(sock, xs_addr(xprt), xprt->addrlen, O_NONBLOCK); in xs_tcp_finish_connecting()
2227 struct rpc_xprt *xprt = &transport->xprt; in xs_tcp_setup_socket() local
2231 sock = xs_create_sock(xprt, transport, in xs_tcp_setup_socket()
2232 xs_addr(xprt)->sa_family, SOCK_STREAM, in xs_tcp_setup_socket()
2235 xprt_wake_pending_tasks(xprt, PTR_ERR(sock)); in xs_tcp_setup_socket()
2241 "%s (port %s)\n", xprt, in xs_tcp_setup_socket()
2242 xprt->address_strings[RPC_DISPLAY_PROTO], in xs_tcp_setup_socket()
2243 xprt->address_strings[RPC_DISPLAY_ADDR], in xs_tcp_setup_socket()
2244 xprt->address_strings[RPC_DISPLAY_PORT]); in xs_tcp_setup_socket()
2246 status = xs_tcp_finish_connecting(xprt, sock); in xs_tcp_setup_socket()
2247 trace_rpc_socket_connect(xprt, sock, status); in xs_tcp_setup_socket()
2249 xprt, -status, xprt_connected(xprt), in xs_tcp_setup_socket()
2257 if (xprt->reestablish_timeout < XS_TCP_INIT_REEST_TO) in xs_tcp_setup_socket()
2258 xprt->reestablish_timeout = XS_TCP_INIT_REEST_TO; in xs_tcp_setup_socket()
2288 xprt_wake_pending_tasks(xprt, status); in xs_tcp_setup_socket()
2289 xs_tcp_force_close(xprt); in xs_tcp_setup_socket()
2291 xprt_clear_connecting(xprt); in xs_tcp_setup_socket()
2293 xprt_unlock_connect(xprt, transport); in xs_tcp_setup_socket()
2310 static void xs_connect(struct rpc_xprt *xprt, struct rpc_task *task) in xs_connect() argument
2312 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_connect()
2315 WARN_ON_ONCE(!xprt_lock_connect(xprt, task, transport)); in xs_connect()
2317 if (transport->sock != NULL && !xprt_connecting(xprt)) { in xs_connect()
2320 xprt, xprt->reestablish_timeout / HZ); in xs_connect()
2325 delay = xprt_reconnect_delay(xprt); in xs_connect()
2326 xprt_reconnect_backoff(xprt, XS_TCP_INIT_REEST_TO); in xs_connect()
2329 dprintk("RPC: xs_connect scheduled xprt %p\n", xprt); in xs_connect()
2339 xs_tcp_force_close(&transport->xprt); in xs_wake_disconnect()
2345 xprt_write_space(&transport->xprt); in xs_wake_write()
2361 xprt_wake_pending_tasks(&transport->xprt, sockerr); in xs_wake_error()
2369 xprt_wake_pending_tasks(&transport->xprt, -EAGAIN); in xs_wake_pending()
2389 static void xs_local_print_stats(struct rpc_xprt *xprt, struct seq_file *seq) in xs_local_print_stats() argument
2393 if (xprt_connected(xprt)) in xs_local_print_stats()
2394 idle_time = (long)(jiffies - xprt->last_used) / HZ; in xs_local_print_stats()
2398 xprt->stat.bind_count, in xs_local_print_stats()
2399 xprt->stat.connect_count, in xs_local_print_stats()
2400 xprt->stat.connect_time / HZ, in xs_local_print_stats()
2402 xprt->stat.sends, in xs_local_print_stats()
2403 xprt->stat.recvs, in xs_local_print_stats()
2404 xprt->stat.bad_xids, in xs_local_print_stats()
2405 xprt->stat.req_u, in xs_local_print_stats()
2406 xprt->stat.bklog_u, in xs_local_print_stats()
2407 xprt->stat.max_slots, in xs_local_print_stats()
2408 xprt->stat.sending_u, in xs_local_print_stats()
2409 xprt->stat.pending_u); in xs_local_print_stats()
2418 static void xs_udp_print_stats(struct rpc_xprt *xprt, struct seq_file *seq) in xs_udp_print_stats() argument
2420 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_udp_print_stats()
2425 xprt->stat.bind_count, in xs_udp_print_stats()
2426 xprt->stat.sends, in xs_udp_print_stats()
2427 xprt->stat.recvs, in xs_udp_print_stats()
2428 xprt->stat.bad_xids, in xs_udp_print_stats()
2429 xprt->stat.req_u, in xs_udp_print_stats()
2430 xprt->stat.bklog_u, in xs_udp_print_stats()
2431 xprt->stat.max_slots, in xs_udp_print_stats()
2432 xprt->stat.sending_u, in xs_udp_print_stats()
2433 xprt->stat.pending_u); in xs_udp_print_stats()
2442 static void xs_tcp_print_stats(struct rpc_xprt *xprt, struct seq_file *seq) in xs_tcp_print_stats() argument
2444 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); in xs_tcp_print_stats()
2447 if (xprt_connected(xprt)) in xs_tcp_print_stats()
2448 idle_time = (long)(jiffies - xprt->last_used) / HZ; in xs_tcp_print_stats()
2453 xprt->stat.bind_count, in xs_tcp_print_stats()
2454 xprt->stat.connect_count, in xs_tcp_print_stats()
2455 xprt->stat.connect_time / HZ, in xs_tcp_print_stats()
2457 xprt->stat.sends, in xs_tcp_print_stats()
2458 xprt->stat.recvs, in xs_tcp_print_stats()
2459 xprt->stat.bad_xids, in xs_tcp_print_stats()
2460 xprt->stat.req_u, in xs_tcp_print_stats()
2461 xprt->stat.bklog_u, in xs_tcp_print_stats()
2462 xprt->stat.max_slots, in xs_tcp_print_stats()
2463 xprt->stat.sending_u, in xs_tcp_print_stats()
2464 xprt->stat.pending_u); in xs_tcp_print_stats()
2513 container_of(req->rq_xprt, struct sock_xprt, xprt); in bc_sendto()
2543 struct svc_xprt *xprt; in bc_send_request() local
2549 xprt = req->rq_xprt->bc_xprt; in bc_send_request()
2555 mutex_lock(&xprt->xpt_mutex); in bc_send_request()
2556 if (test_bit(XPT_DEAD, &xprt->xpt_flags)) in bc_send_request()
2560 mutex_unlock(&xprt->xpt_mutex); in bc_send_request()
2572 static void bc_close(struct rpc_xprt *xprt) in bc_close() argument
2574 xprt_disconnect_done(xprt); in bc_close()
2582 static void bc_destroy(struct rpc_xprt *xprt) in bc_destroy() argument
2584 dprintk("RPC: bc_destroy xprt %p\n", xprt); in bc_destroy()
2586 xs_xprt_free(xprt); in bc_destroy()
2714 struct rpc_xprt *xprt; in xs_setup_xprt() local
2717 if (args->addrlen > sizeof(xprt->addr)) { in xs_setup_xprt()
2722 xprt = xprt_alloc(args->net, sizeof(*new), slot_table_size, in xs_setup_xprt()
2724 if (xprt == NULL) { in xs_setup_xprt()
2730 new = container_of(xprt, struct sock_xprt, xprt); in xs_setup_xprt()
2732 memcpy(&xprt->addr, args->dstaddr, args->addrlen); in xs_setup_xprt()
2733 xprt->addrlen = args->addrlen; in xs_setup_xprt()
2741 xprt_free(xprt); in xs_setup_xprt()
2746 return xprt; in xs_setup_xprt()
2765 struct rpc_xprt *xprt; in xs_setup_local() local
2768 xprt = xs_setup_xprt(args, xprt_tcp_slot_table_entries, in xs_setup_local()
2770 if (IS_ERR(xprt)) in xs_setup_local()
2771 return xprt; in xs_setup_local()
2772 transport = container_of(xprt, struct sock_xprt, xprt); in xs_setup_local()
2774 xprt->prot = 0; in xs_setup_local()
2775 xprt->xprt_class = &xs_local_transport; in xs_setup_local()
2776 xprt->max_payload = RPC_MAX_FRAGMENT_SIZE; in xs_setup_local()
2778 xprt->bind_timeout = XS_BIND_TO; in xs_setup_local()
2779 xprt->reestablish_timeout = XS_TCP_INIT_REEST_TO; in xs_setup_local()
2780 xprt->idle_timeout = XS_IDLE_DISC_TO; in xs_setup_local()
2782 xprt->ops = &xs_local_ops; in xs_setup_local()
2783 xprt->timeout = &xs_local_default_timeout; in xs_setup_local()
2797 xprt_set_bound(xprt); in xs_setup_local()
2798 xs_format_peer_addresses(xprt, "local", RPCBIND_NETID_LOCAL); in xs_setup_local()
2809 xprt->address_strings[RPC_DISPLAY_ADDR]); in xs_setup_local()
2812 return xprt; in xs_setup_local()
2815 xs_xprt_free(xprt); in xs_setup_local()
2834 struct rpc_xprt *xprt; in xs_setup_udp() local
2838 xprt = xs_setup_xprt(args, xprt_udp_slot_table_entries, in xs_setup_udp()
2840 if (IS_ERR(xprt)) in xs_setup_udp()
2841 return xprt; in xs_setup_udp()
2842 transport = container_of(xprt, struct sock_xprt, xprt); in xs_setup_udp()
2844 xprt->prot = IPPROTO_UDP; in xs_setup_udp()
2845 xprt->xprt_class = &xs_udp_transport; in xs_setup_udp()
2847 xprt->max_payload = (1U << 16) - (MAX_HEADER << 3); in xs_setup_udp()
2849 xprt->bind_timeout = XS_BIND_TO; in xs_setup_udp()
2850 xprt->reestablish_timeout = XS_UDP_REEST_TO; in xs_setup_udp()
2851 xprt->idle_timeout = XS_IDLE_DISC_TO; in xs_setup_udp()
2853 xprt->ops = &xs_udp_ops; in xs_setup_udp()
2855 xprt->timeout = &xs_udp_default_timeout; in xs_setup_udp()
2864 xprt_set_bound(xprt); in xs_setup_udp()
2866 xs_format_peer_addresses(xprt, "udp", RPCBIND_NETID_UDP); in xs_setup_udp()
2870 xprt_set_bound(xprt); in xs_setup_udp()
2872 xs_format_peer_addresses(xprt, "udp", RPCBIND_NETID_UDP6); in xs_setup_udp()
2879 if (xprt_bound(xprt)) in xs_setup_udp()
2881 xprt->address_strings[RPC_DISPLAY_ADDR], in xs_setup_udp()
2882 xprt->address_strings[RPC_DISPLAY_PORT], in xs_setup_udp()
2883 xprt->address_strings[RPC_DISPLAY_PROTO]); in xs_setup_udp()
2886 xprt->address_strings[RPC_DISPLAY_ADDR], in xs_setup_udp()
2887 xprt->address_strings[RPC_DISPLAY_PROTO]); in xs_setup_udp()
2890 return xprt; in xs_setup_udp()
2893 xs_xprt_free(xprt); in xs_setup_udp()
2911 struct rpc_xprt *xprt; in xs_setup_tcp() local
2919 xprt = xs_setup_xprt(args, xprt_tcp_slot_table_entries, in xs_setup_tcp()
2921 if (IS_ERR(xprt)) in xs_setup_tcp()
2922 return xprt; in xs_setup_tcp()
2923 transport = container_of(xprt, struct sock_xprt, xprt); in xs_setup_tcp()
2925 xprt->prot = IPPROTO_TCP; in xs_setup_tcp()
2926 xprt->xprt_class = &xs_tcp_transport; in xs_setup_tcp()
2927 xprt->max_payload = RPC_MAX_FRAGMENT_SIZE; in xs_setup_tcp()
2929 xprt->bind_timeout = XS_BIND_TO; in xs_setup_tcp()
2930 xprt->reestablish_timeout = XS_TCP_INIT_REEST_TO; in xs_setup_tcp()
2931 xprt->idle_timeout = XS_IDLE_DISC_TO; in xs_setup_tcp()
2933 xprt->ops = &xs_tcp_ops; in xs_setup_tcp()
2934 xprt->timeout = &xs_tcp_default_timeout; in xs_setup_tcp()
2936 xprt->max_reconnect_timeout = xprt->timeout->to_maxval; in xs_setup_tcp()
2937 xprt->connect_timeout = xprt->timeout->to_initval * in xs_setup_tcp()
2938 (xprt->timeout->to_retries + 1); in xs_setup_tcp()
2947 xprt_set_bound(xprt); in xs_setup_tcp()
2949 xs_format_peer_addresses(xprt, "tcp", RPCBIND_NETID_TCP); in xs_setup_tcp()
2953 xprt_set_bound(xprt); in xs_setup_tcp()
2955 xs_format_peer_addresses(xprt, "tcp", RPCBIND_NETID_TCP6); in xs_setup_tcp()
2962 if (xprt_bound(xprt)) in xs_setup_tcp()
2964 xprt->address_strings[RPC_DISPLAY_ADDR], in xs_setup_tcp()
2965 xprt->address_strings[RPC_DISPLAY_PORT], in xs_setup_tcp()
2966 xprt->address_strings[RPC_DISPLAY_PROTO]); in xs_setup_tcp()
2969 xprt->address_strings[RPC_DISPLAY_ADDR], in xs_setup_tcp()
2970 xprt->address_strings[RPC_DISPLAY_PROTO]); in xs_setup_tcp()
2973 return xprt; in xs_setup_tcp()
2976 xs_xprt_free(xprt); in xs_setup_tcp()
2988 struct rpc_xprt *xprt; in xs_setup_bc_tcp() local
2993 xprt = xs_setup_xprt(args, xprt_tcp_slot_table_entries, in xs_setup_bc_tcp()
2995 if (IS_ERR(xprt)) in xs_setup_bc_tcp()
2996 return xprt; in xs_setup_bc_tcp()
2997 transport = container_of(xprt, struct sock_xprt, xprt); in xs_setup_bc_tcp()
2999 xprt->prot = IPPROTO_TCP; in xs_setup_bc_tcp()
3000 xprt->xprt_class = &xs_bc_tcp_transport; in xs_setup_bc_tcp()
3001 xprt->max_payload = RPC_MAX_FRAGMENT_SIZE; in xs_setup_bc_tcp()
3002 xprt->timeout = &xs_tcp_default_timeout; in xs_setup_bc_tcp()
3005 xprt_set_bound(xprt); in xs_setup_bc_tcp()
3006 xprt->bind_timeout = 0; in xs_setup_bc_tcp()
3007 xprt->reestablish_timeout = 0; in xs_setup_bc_tcp()
3008 xprt->idle_timeout = 0; in xs_setup_bc_tcp()
3010 xprt->ops = &bc_tcp_ops; in xs_setup_bc_tcp()
3014 xs_format_peer_addresses(xprt, "tcp", in xs_setup_bc_tcp()
3018 xs_format_peer_addresses(xprt, "tcp", in xs_setup_bc_tcp()
3027 xprt->address_strings[RPC_DISPLAY_ADDR], in xs_setup_bc_tcp()
3028 xprt->address_strings[RPC_DISPLAY_PORT], in xs_setup_bc_tcp()
3029 xprt->address_strings[RPC_DISPLAY_PROTO]); in xs_setup_bc_tcp()
3037 xprt_get(xprt); in xs_setup_bc_tcp()
3038 args->bc_xprt->xpt_bc_xprt = xprt; in xs_setup_bc_tcp()
3039 xprt->bc_xprt = args->bc_xprt; in xs_setup_bc_tcp()
3048 xprt_set_connected(xprt); in xs_setup_bc_tcp()
3051 return xprt; in xs_setup_bc_tcp()
3055 xprt_put(xprt); in xs_setup_bc_tcp()
3058 xs_xprt_free(xprt); in xs_setup_bc_tcp()