xref: /openbmc/linux/net/sunrpc/sunrpc_syms.c (revision 90d51b02)
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