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 { 312f72c9b7SPavel Emelyanov return 0; 322f72c9b7SPavel Emelyanov } 332f72c9b7SPavel Emelyanov 342f72c9b7SPavel Emelyanov static __net_exit void sunrpc_exit_net(struct net *net) 352f72c9b7SPavel Emelyanov { 362f72c9b7SPavel Emelyanov } 372f72c9b7SPavel Emelyanov 382f72c9b7SPavel Emelyanov static struct pernet_operations sunrpc_net_ops = { 392f72c9b7SPavel Emelyanov .init = sunrpc_init_net, 402f72c9b7SPavel Emelyanov .exit = sunrpc_exit_net, 412f72c9b7SPavel Emelyanov .id = &sunrpc_net_id, 422f72c9b7SPavel Emelyanov .size = sizeof(struct sunrpc_net), 432f72c9b7SPavel Emelyanov }; 442f72c9b7SPavel Emelyanov 453fc605a2SNeilBrown extern struct cache_detail ip_map_cache, unix_gid_cache; 461da177e4SLinus Torvalds 47c526611dSChuck Lever extern void cleanup_rpcb_clnt(void); 48c526611dSChuck Lever 491da177e4SLinus Torvalds static int __init 501da177e4SLinus Torvalds init_sunrpc(void) 511da177e4SLinus Torvalds { 521da177e4SLinus Torvalds int err = register_rpc_pipefs(); 531da177e4SLinus Torvalds if (err) 541da177e4SLinus Torvalds goto out; 555bd5f581SAkinobu Mita err = rpc_init_mempool(); 565d8d9a4dSTrond Myklebust if (err) 575d8d9a4dSTrond Myklebust goto out2; 585d8d9a4dSTrond Myklebust err = rpcauth_init_module(); 595d8d9a4dSTrond Myklebust if (err) 605d8d9a4dSTrond Myklebust goto out3; 612f72c9b7SPavel Emelyanov 622f72c9b7SPavel Emelyanov cache_initialize(); 632f72c9b7SPavel Emelyanov 642f72c9b7SPavel Emelyanov err = register_pernet_subsys(&sunrpc_net_ops); 652f72c9b7SPavel Emelyanov if (err) 662f72c9b7SPavel Emelyanov goto out4; 671da177e4SLinus Torvalds #ifdef RPC_DEBUG 681da177e4SLinus Torvalds rpc_register_sysctl(); 691da177e4SLinus Torvalds #endif 701da177e4SLinus Torvalds #ifdef CONFIG_PROC_FS 711da177e4SLinus Torvalds rpc_proc_init(); 721da177e4SLinus Torvalds #endif 731da177e4SLinus Torvalds cache_register(&ip_map_cache); 743fc605a2SNeilBrown cache_register(&unix_gid_cache); 75360d8738STom Tucker svc_init_xprt_sock(); /* svc sock transport */ 76360d8738STom Tucker init_socket_xprt(); /* clnt sock transport */ 775d8d9a4dSTrond Myklebust return 0; 782f72c9b7SPavel Emelyanov 792f72c9b7SPavel Emelyanov out4: 802f72c9b7SPavel Emelyanov rpcauth_remove_module(); 815d8d9a4dSTrond Myklebust out3: 825d8d9a4dSTrond Myklebust rpc_destroy_mempool(); 835d8d9a4dSTrond Myklebust out2: 845d8d9a4dSTrond Myklebust unregister_rpc_pipefs(); 851da177e4SLinus Torvalds out: 861da177e4SLinus Torvalds return err; 871da177e4SLinus Torvalds } 881da177e4SLinus Torvalds 891da177e4SLinus Torvalds static void __exit 901da177e4SLinus Torvalds cleanup_sunrpc(void) 911da177e4SLinus Torvalds { 92c526611dSChuck Lever cleanup_rpcb_clnt(); 93f5c2187cSTrond Myklebust rpcauth_remove_module(); 94282b32e1SChuck Lever cleanup_socket_xprt(); 95360d8738STom Tucker svc_cleanup_xprt_sock(); 961da177e4SLinus Torvalds unregister_rpc_pipefs(); 971da177e4SLinus Torvalds rpc_destroy_mempool(); 98df95a9d4SJ. Bruce Fields cache_unregister(&ip_map_cache); 99df95a9d4SJ. Bruce Fields cache_unregister(&unix_gid_cache); 1002f72c9b7SPavel Emelyanov unregister_pernet_subsys(&sunrpc_net_ops); 1011da177e4SLinus Torvalds #ifdef RPC_DEBUG 1021da177e4SLinus Torvalds rpc_unregister_sysctl(); 1031da177e4SLinus Torvalds #endif 1041da177e4SLinus Torvalds #ifdef CONFIG_PROC_FS 1051da177e4SLinus Torvalds rpc_proc_exit(); 1061da177e4SLinus Torvalds #endif 10775de874fSJesper Dangaard Brouer rcu_barrier(); /* Wait for completion of call_rcu()'s */ 1081da177e4SLinus Torvalds } 1091da177e4SLinus Torvalds MODULE_LICENSE("GPL"); 110405d8f8bSTrond Myklebust fs_initcall(init_sunrpc); /* Ensure we're initialised before nfs */ 1111da177e4SLinus Torvalds module_exit(cleanup_sunrpc); 112