xprtsock.c (4417c8c41a51a2ae95b2a2fa2811640b368c4151) | xprtsock.c (bc25571e21e8bd053554209f5b1b228ad71e6b99) |
---|---|
1/* 2 * linux/net/sunrpc/xprtsock.c 3 * 4 * Client-side transport implementation for sockets. 5 * 6 * TCP callback races fixes (C) 1998 Red Hat Software <alan@redhat.com> 7 * TCP send fixes (C) 1998 Red Hat Software <alan@redhat.com> 8 * TCP NFS related read + write fixes --- 6 unchanged lines hidden (view full) --- 15 * IP socket transport implementation, (C) 2005 Chuck Lever <cel@netapp.com> 16 * 17 * IPv6 support contributed by Gilles Quillard, Bull Open Source, 2005. 18 * <gilles.quillard@bull.net> 19 */ 20 21#include <linux/types.h> 22#include <linux/slab.h> | 1/* 2 * linux/net/sunrpc/xprtsock.c 3 * 4 * Client-side transport implementation for sockets. 5 * 6 * TCP callback races fixes (C) 1998 Red Hat Software <alan@redhat.com> 7 * TCP send fixes (C) 1998 Red Hat Software <alan@redhat.com> 8 * TCP NFS related read + write fixes --- 6 unchanged lines hidden (view full) --- 15 * IP socket transport implementation, (C) 2005 Chuck Lever <cel@netapp.com> 16 * 17 * IPv6 support contributed by Gilles Quillard, Bull Open Source, 2005. 18 * <gilles.quillard@bull.net> 19 */ 20 21#include <linux/types.h> 22#include <linux/slab.h> |
23#include <linux/module.h> |
|
23#include <linux/capability.h> 24#include <linux/pagemap.h> 25#include <linux/errno.h> 26#include <linux/socket.h> 27#include <linux/in.h> 28#include <linux/net.h> 29#include <linux/mm.h> 30#include <linux/udp.h> --- 741 unchanged lines hidden (view full) --- 772 773 cancel_rearming_delayed_work(&transport->connect_worker); 774 775 xprt_disconnect(xprt); 776 xs_close(xprt); 777 xs_free_peer_addresses(xprt); 778 kfree(xprt->slot); 779 kfree(xprt); | 24#include <linux/capability.h> 25#include <linux/pagemap.h> 26#include <linux/errno.h> 27#include <linux/socket.h> 28#include <linux/in.h> 29#include <linux/net.h> 30#include <linux/mm.h> 31#include <linux/udp.h> --- 741 unchanged lines hidden (view full) --- 773 774 cancel_rearming_delayed_work(&transport->connect_worker); 775 776 xprt_disconnect(xprt); 777 xs_close(xprt); 778 xs_free_peer_addresses(xprt); 779 kfree(xprt->slot); 780 kfree(xprt); |
781 module_put(THIS_MODULE); |
|
780} 781 782static inline struct rpc_xprt *xprt_from_sock(struct sock *sk) 783{ 784 return (struct rpc_xprt *) sk->sk_user_data; 785} 786 787/** --- 989 unchanged lines hidden (view full) --- 1777 .buf_free = rpc_free, 1778 .send_request = xs_tcp_send_request, 1779 .set_retrans_timeout = xprt_set_retrans_timeout_def, 1780 .close = xs_close, 1781 .destroy = xs_destroy, 1782 .print_stats = xs_tcp_print_stats, 1783}; 1784 | 782} 783 784static inline struct rpc_xprt *xprt_from_sock(struct sock *sk) 785{ 786 return (struct rpc_xprt *) sk->sk_user_data; 787} 788 789/** --- 989 unchanged lines hidden (view full) --- 1779 .buf_free = rpc_free, 1780 .send_request = xs_tcp_send_request, 1781 .set_retrans_timeout = xprt_set_retrans_timeout_def, 1782 .close = xs_close, 1783 .destroy = xs_destroy, 1784 .print_stats = xs_tcp_print_stats, 1785}; 1786 |
1785static struct rpc_xprt *xs_setup_xprt(struct rpc_xprtsock_create *args, unsigned int slot_table_size) | 1787static struct rpc_xprt *xs_setup_xprt(struct rpc_xprtsock_create *args, 1788 unsigned int slot_table_size) |
1786{ 1787 struct rpc_xprt *xprt; 1788 struct sock_xprt *new; 1789 1790 if (args->addrlen > sizeof(xprt->addr)) { 1791 dprintk("RPC: xs_setup_xprt: address too large\n"); 1792 return ERR_PTR(-EBADF); 1793 } --- 77 unchanged lines hidden (view full) --- 1871 default: 1872 kfree(xprt); 1873 return ERR_PTR(-EAFNOSUPPORT); 1874 } 1875 1876 dprintk("RPC: set up transport to address %s\n", 1877 xprt->address_strings[RPC_DISPLAY_ALL]); 1878 | 1789{ 1790 struct rpc_xprt *xprt; 1791 struct sock_xprt *new; 1792 1793 if (args->addrlen > sizeof(xprt->addr)) { 1794 dprintk("RPC: xs_setup_xprt: address too large\n"); 1795 return ERR_PTR(-EBADF); 1796 } --- 77 unchanged lines hidden (view full) --- 1874 default: 1875 kfree(xprt); 1876 return ERR_PTR(-EAFNOSUPPORT); 1877 } 1878 1879 dprintk("RPC: set up transport to address %s\n", 1880 xprt->address_strings[RPC_DISPLAY_ALL]); 1881 |
1879 return xprt; | 1882 if (try_module_get(THIS_MODULE)) 1883 return xprt; 1884 1885 kfree(xprt->slot); 1886 kfree(xprt); 1887 return ERR_PTR(-EINVAL); |
1880} 1881 1882/** 1883 * xs_setup_tcp - Set up transport to use a TCP socket 1884 * @args: rpc transport creation arguments 1885 * 1886 */ 1887struct rpc_xprt *xs_setup_tcp(struct rpc_xprtsock_create *args) --- 41 unchanged lines hidden (view full) --- 1929 default: 1930 kfree(xprt); 1931 return ERR_PTR(-EAFNOSUPPORT); 1932 } 1933 1934 dprintk("RPC: set up transport to address %s\n", 1935 xprt->address_strings[RPC_DISPLAY_ALL]); 1936 | 1888} 1889 1890/** 1891 * xs_setup_tcp - Set up transport to use a TCP socket 1892 * @args: rpc transport creation arguments 1893 * 1894 */ 1895struct rpc_xprt *xs_setup_tcp(struct rpc_xprtsock_create *args) --- 41 unchanged lines hidden (view full) --- 1937 default: 1938 kfree(xprt); 1939 return ERR_PTR(-EAFNOSUPPORT); 1940 } 1941 1942 dprintk("RPC: set up transport to address %s\n", 1943 xprt->address_strings[RPC_DISPLAY_ALL]); 1944 |
1937 return xprt; | 1945 if (try_module_get(THIS_MODULE)) 1946 return xprt; 1947 1948 kfree(xprt->slot); 1949 kfree(xprt); 1950 return ERR_PTR(-EINVAL); |
1938} 1939 | 1951} 1952 |
1953static struct xprt_class xs_udp_transport = { 1954 .list = LIST_HEAD_INIT(xs_udp_transport.list), 1955 .name = "udp", 1956 .owner = THIS_MODULE, 1957 .family = AF_INET, 1958 .protocol = IPPROTO_UDP, 1959 .setup = xs_setup_udp, 1960}; 1961 1962static struct xprt_class xs_tcp_transport = { 1963 .list = LIST_HEAD_INIT(xs_tcp_transport.list), 1964 .name = "tcp", 1965 .owner = THIS_MODULE, 1966 .family = AF_INET, 1967 .protocol = IPPROTO_TCP, 1968 .setup = xs_setup_tcp, 1969}; 1970 |
|
1940/** | 1971/** |
1941 * init_socket_xprt - set up xprtsock's sysctls | 1972 * init_socket_xprt - set up xprtsock's sysctls, register with RPC client |
1942 * 1943 */ 1944int init_socket_xprt(void) 1945{ 1946#ifdef RPC_DEBUG 1947 if (!sunrpc_table_header) 1948 sunrpc_table_header = register_sysctl_table(sunrpc_table); 1949#endif 1950 | 1973 * 1974 */ 1975int init_socket_xprt(void) 1976{ 1977#ifdef RPC_DEBUG 1978 if (!sunrpc_table_header) 1979 sunrpc_table_header = register_sysctl_table(sunrpc_table); 1980#endif 1981 |
1982 xprt_register_transport(&xs_udp_transport); 1983 xprt_register_transport(&xs_tcp_transport); 1984 |
|
1951 return 0; 1952} 1953 1954/** | 1985 return 0; 1986} 1987 1988/** |
1955 * cleanup_socket_xprt - remove xprtsock's sysctls | 1989 * cleanup_socket_xprt - remove xprtsock's sysctls, unregister |
1956 * 1957 */ 1958void cleanup_socket_xprt(void) 1959{ 1960#ifdef RPC_DEBUG 1961 if (sunrpc_table_header) { 1962 unregister_sysctl_table(sunrpc_table_header); 1963 sunrpc_table_header = NULL; 1964 } 1965#endif | 1990 * 1991 */ 1992void cleanup_socket_xprt(void) 1993{ 1994#ifdef RPC_DEBUG 1995 if (sunrpc_table_header) { 1996 unregister_sysctl_table(sunrpc_table_header); 1997 sunrpc_table_header = NULL; 1998 } 1999#endif |
2000 2001 xprt_unregister_transport(&xs_udp_transport); 2002 xprt_unregister_transport(&xs_tcp_transport); |
|
1966} | 2003} |