11da177e4SLinus Torvalds /* 21da177e4SLinus Torvalds * linux/net/sunrpc/sunrpc_syms.c 31da177e4SLinus Torvalds * 41da177e4SLinus Torvalds * Symbols exported by the sunrpc module. 51da177e4SLinus Torvalds * 61da177e4SLinus Torvalds * Copyright (C) 1997 Olaf Kirch <okir@monad.swb.de> 71da177e4SLinus Torvalds */ 81da177e4SLinus Torvalds 91da177e4SLinus Torvalds #include <linux/module.h> 101da177e4SLinus Torvalds 111da177e4SLinus Torvalds #include <linux/types.h> 121da177e4SLinus Torvalds #include <linux/uio.h> 131da177e4SLinus Torvalds #include <linux/unistd.h> 141da177e4SLinus Torvalds #include <linux/init.h> 151da177e4SLinus Torvalds 161da177e4SLinus Torvalds #include <linux/sunrpc/sched.h> 171da177e4SLinus Torvalds #include <linux/sunrpc/clnt.h> 181da177e4SLinus Torvalds #include <linux/sunrpc/svc.h> 191da177e4SLinus Torvalds #include <linux/sunrpc/svcsock.h> 201da177e4SLinus Torvalds #include <linux/sunrpc/auth.h> 211da177e4SLinus Torvalds #include <linux/workqueue.h> 221da177e4SLinus Torvalds #include <linux/sunrpc/rpc_pipe_fs.h> 2349c36fccS\"Talpey, Thomas\ #include <linux/sunrpc/xprtsock.h> 241da177e4SLinus Torvalds 252f72c9b7SPavel Emelyanov #include "netns.h" 262f72c9b7SPavel Emelyanov 272f72c9b7SPavel Emelyanov int sunrpc_net_id; 282f72c9b7SPavel Emelyanov 292f72c9b7SPavel Emelyanov static __net_init int sunrpc_init_net(struct net *net) 302f72c9b7SPavel Emelyanov { 314f42d0d5SPavel Emelyanov int err; 324f42d0d5SPavel Emelyanov 334f42d0d5SPavel Emelyanov err = rpc_proc_init(net); 344f42d0d5SPavel Emelyanov if (err) 354f42d0d5SPavel Emelyanov goto err_proc; 364f42d0d5SPavel Emelyanov 3790d51b02SPavel Emelyanov err = ip_map_cache_create(net); 3890d51b02SPavel Emelyanov if (err) 3990d51b02SPavel Emelyanov goto err_ipmap; 4090d51b02SPavel Emelyanov 412f72c9b7SPavel Emelyanov return 0; 424f42d0d5SPavel Emelyanov 4390d51b02SPavel Emelyanov err_ipmap: 4490d51b02SPavel Emelyanov rpc_proc_exit(net); 454f42d0d5SPavel Emelyanov err_proc: 464f42d0d5SPavel Emelyanov return err; 472f72c9b7SPavel Emelyanov } 482f72c9b7SPavel Emelyanov 492f72c9b7SPavel Emelyanov static __net_exit void sunrpc_exit_net(struct net *net) 502f72c9b7SPavel Emelyanov { 5190d51b02SPavel Emelyanov ip_map_cache_destroy(net); 524f42d0d5SPavel Emelyanov rpc_proc_exit(net); 532f72c9b7SPavel Emelyanov } 542f72c9b7SPavel Emelyanov 552f72c9b7SPavel Emelyanov static struct pernet_operations sunrpc_net_ops = { 562f72c9b7SPavel Emelyanov .init = sunrpc_init_net, 572f72c9b7SPavel Emelyanov .exit = sunrpc_exit_net, 582f72c9b7SPavel Emelyanov .id = &sunrpc_net_id, 592f72c9b7SPavel Emelyanov .size = sizeof(struct sunrpc_net), 602f72c9b7SPavel Emelyanov }; 612f72c9b7SPavel Emelyanov 6290d51b02SPavel Emelyanov extern struct cache_detail unix_gid_cache; 631da177e4SLinus Torvalds 64c526611dSChuck Lever extern void cleanup_rpcb_clnt(void); 65c526611dSChuck Lever 661da177e4SLinus Torvalds static int __init 671da177e4SLinus Torvalds init_sunrpc(void) 681da177e4SLinus Torvalds { 691da177e4SLinus Torvalds int err = register_rpc_pipefs(); 701da177e4SLinus Torvalds if (err) 711da177e4SLinus Torvalds goto out; 725bd5f581SAkinobu Mita err = rpc_init_mempool(); 735d8d9a4dSTrond Myklebust if (err) 745d8d9a4dSTrond Myklebust goto out2; 755d8d9a4dSTrond Myklebust err = rpcauth_init_module(); 765d8d9a4dSTrond Myklebust if (err) 775d8d9a4dSTrond Myklebust goto out3; 782f72c9b7SPavel Emelyanov 792f72c9b7SPavel Emelyanov cache_initialize(); 802f72c9b7SPavel Emelyanov 812f72c9b7SPavel Emelyanov err = register_pernet_subsys(&sunrpc_net_ops); 822f72c9b7SPavel Emelyanov if (err) 832f72c9b7SPavel Emelyanov goto out4; 841da177e4SLinus Torvalds #ifdef RPC_DEBUG 851da177e4SLinus Torvalds rpc_register_sysctl(); 861da177e4SLinus Torvalds #endif 873fc605a2SNeilBrown cache_register(&unix_gid_cache); 88360d8738STom Tucker svc_init_xprt_sock(); /* svc sock transport */ 89360d8738STom Tucker init_socket_xprt(); /* clnt sock transport */ 905d8d9a4dSTrond Myklebust return 0; 912f72c9b7SPavel Emelyanov 922f72c9b7SPavel Emelyanov out4: 932f72c9b7SPavel Emelyanov rpcauth_remove_module(); 945d8d9a4dSTrond Myklebust out3: 955d8d9a4dSTrond Myklebust rpc_destroy_mempool(); 965d8d9a4dSTrond Myklebust out2: 975d8d9a4dSTrond Myklebust unregister_rpc_pipefs(); 981da177e4SLinus Torvalds out: 991da177e4SLinus Torvalds return err; 1001da177e4SLinus Torvalds } 1011da177e4SLinus Torvalds 1021da177e4SLinus Torvalds static void __exit 1031da177e4SLinus Torvalds cleanup_sunrpc(void) 1041da177e4SLinus Torvalds { 105c526611dSChuck Lever cleanup_rpcb_clnt(); 106f5c2187cSTrond Myklebust rpcauth_remove_module(); 107282b32e1SChuck Lever cleanup_socket_xprt(); 108360d8738STom Tucker svc_cleanup_xprt_sock(); 1091da177e4SLinus Torvalds unregister_rpc_pipefs(); 1101da177e4SLinus Torvalds rpc_destroy_mempool(); 111df95a9d4SJ. Bruce Fields cache_unregister(&unix_gid_cache); 1122f72c9b7SPavel Emelyanov unregister_pernet_subsys(&sunrpc_net_ops); 1131da177e4SLinus Torvalds #ifdef RPC_DEBUG 1141da177e4SLinus Torvalds rpc_unregister_sysctl(); 1151da177e4SLinus Torvalds #endif 11675de874fSJesper Dangaard Brouer rcu_barrier(); /* Wait for completion of call_rcu()'s */ 1171da177e4SLinus Torvalds } 1181da177e4SLinus Torvalds MODULE_LICENSE("GPL"); 119405d8f8bSTrond Myklebust fs_initcall(init_sunrpc); /* Ensure we're initialised before nfs */ 1201da177e4SLinus Torvalds module_exit(cleanup_sunrpc); 121