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}