xref: /openbmc/linux/net/sunrpc/sunrpc_syms.c (revision adae0fe0)
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;
28a1db410dSStanislav Kinsbursky EXPORT_SYMBOL_GPL(sunrpc_net_id);
292f72c9b7SPavel Emelyanov 
302f72c9b7SPavel Emelyanov static __net_init int sunrpc_init_net(struct net *net)
312f72c9b7SPavel Emelyanov {
324f42d0d5SPavel Emelyanov 	int err;
3370abc49bSStanislav Kinsbursky 	struct sunrpc_net *sn = net_generic(net, sunrpc_net_id);
344f42d0d5SPavel Emelyanov 
354f42d0d5SPavel Emelyanov 	err = rpc_proc_init(net);
364f42d0d5SPavel Emelyanov 	if (err)
374f42d0d5SPavel Emelyanov 		goto err_proc;
384f42d0d5SPavel Emelyanov 
3990d51b02SPavel Emelyanov 	err = ip_map_cache_create(net);
4090d51b02SPavel Emelyanov 	if (err)
4190d51b02SPavel Emelyanov 		goto err_ipmap;
4290d51b02SPavel Emelyanov 
4373393232SStanislav Kinsbursky 	err = unix_gid_cache_create(net);
4473393232SStanislav Kinsbursky 	if (err)
4573393232SStanislav Kinsbursky 		goto err_unixgid;
4673393232SStanislav Kinsbursky 
47c21a588fSStanislav Kinsbursky 	rpc_pipefs_init_net(net);
4870abc49bSStanislav Kinsbursky 	INIT_LIST_HEAD(&sn->all_clients);
4970abc49bSStanislav Kinsbursky 	spin_lock_init(&sn->rpc_client_lock);
501d96e80fSStanislav Kinsbursky 	spin_lock_init(&sn->rpcb_clnt_lock);
512f72c9b7SPavel Emelyanov 	return 0;
524f42d0d5SPavel Emelyanov 
5373393232SStanislav Kinsbursky err_unixgid:
5473393232SStanislav Kinsbursky 	ip_map_cache_destroy(net);
5590d51b02SPavel Emelyanov err_ipmap:
5690d51b02SPavel Emelyanov 	rpc_proc_exit(net);
574f42d0d5SPavel Emelyanov err_proc:
584f42d0d5SPavel Emelyanov 	return err;
592f72c9b7SPavel Emelyanov }
602f72c9b7SPavel Emelyanov 
612f72c9b7SPavel Emelyanov static __net_exit void sunrpc_exit_net(struct net *net)
622f72c9b7SPavel Emelyanov {
6373393232SStanislav Kinsbursky 	unix_gid_cache_destroy(net);
6490d51b02SPavel Emelyanov 	ip_map_cache_destroy(net);
654f42d0d5SPavel Emelyanov 	rpc_proc_exit(net);
662f72c9b7SPavel Emelyanov }
672f72c9b7SPavel Emelyanov 
682f72c9b7SPavel Emelyanov static struct pernet_operations sunrpc_net_ops = {
692f72c9b7SPavel Emelyanov 	.init = sunrpc_init_net,
702f72c9b7SPavel Emelyanov 	.exit = sunrpc_exit_net,
712f72c9b7SPavel Emelyanov 	.id = &sunrpc_net_id,
722f72c9b7SPavel Emelyanov 	.size = sizeof(struct sunrpc_net),
732f72c9b7SPavel Emelyanov };
742f72c9b7SPavel Emelyanov 
751da177e4SLinus Torvalds static int __init
761da177e4SLinus Torvalds init_sunrpc(void)
771da177e4SLinus Torvalds {
78adae0fe0SStanislav Kinsbursky 	int err = rpc_init_mempool();
791da177e4SLinus Torvalds 	if (err)
801da177e4SLinus Torvalds 		goto out;
815d8d9a4dSTrond Myklebust 	err = rpcauth_init_module();
825d8d9a4dSTrond Myklebust 	if (err)
83adae0fe0SStanislav Kinsbursky 		goto out2;
842f72c9b7SPavel Emelyanov 
852f72c9b7SPavel Emelyanov 	cache_initialize();
862f72c9b7SPavel Emelyanov 
872f72c9b7SPavel Emelyanov 	err = register_pernet_subsys(&sunrpc_net_ops);
882f72c9b7SPavel Emelyanov 	if (err)
89adae0fe0SStanislav Kinsbursky 		goto out3;
90adae0fe0SStanislav Kinsbursky 
91adae0fe0SStanislav Kinsbursky 	err = register_rpc_pipefs();
92adae0fe0SStanislav Kinsbursky 	if (err)
932f72c9b7SPavel Emelyanov 		goto out4;
941da177e4SLinus Torvalds #ifdef RPC_DEBUG
951da177e4SLinus Torvalds 	rpc_register_sysctl();
961da177e4SLinus Torvalds #endif
97360d8738STom Tucker 	svc_init_xprt_sock();	/* svc sock transport */
98360d8738STom Tucker 	init_socket_xprt();	/* clnt sock transport */
995d8d9a4dSTrond Myklebust 	return 0;
1002f72c9b7SPavel Emelyanov 
1012f72c9b7SPavel Emelyanov out4:
102adae0fe0SStanislav Kinsbursky 	unregister_pernet_subsys(&sunrpc_net_ops);
1035d8d9a4dSTrond Myklebust out3:
104adae0fe0SStanislav Kinsbursky 	rpcauth_remove_module();
1055d8d9a4dSTrond Myklebust out2:
106adae0fe0SStanislav Kinsbursky 	rpc_destroy_mempool();
1071da177e4SLinus Torvalds out:
1081da177e4SLinus Torvalds 	return err;
1091da177e4SLinus Torvalds }
1101da177e4SLinus Torvalds 
1111da177e4SLinus Torvalds static void __exit
1121da177e4SLinus Torvalds cleanup_sunrpc(void)
1131da177e4SLinus Torvalds {
114f5c2187cSTrond Myklebust 	rpcauth_remove_module();
115282b32e1SChuck Lever 	cleanup_socket_xprt();
116360d8738STom Tucker 	svc_cleanup_xprt_sock();
1171da177e4SLinus Torvalds 	unregister_rpc_pipefs();
1181da177e4SLinus Torvalds 	rpc_destroy_mempool();
1192f72c9b7SPavel Emelyanov 	unregister_pernet_subsys(&sunrpc_net_ops);
1201da177e4SLinus Torvalds #ifdef RPC_DEBUG
1211da177e4SLinus Torvalds 	rpc_unregister_sysctl();
1221da177e4SLinus Torvalds #endif
12375de874fSJesper Dangaard Brouer 	rcu_barrier(); /* Wait for completion of call_rcu()'s */
1241da177e4SLinus Torvalds }
1251da177e4SLinus Torvalds MODULE_LICENSE("GPL");
126405d8f8bSTrond Myklebust fs_initcall(init_sunrpc); /* Ensure we're initialised before nfs */
1271da177e4SLinus Torvalds module_exit(cleanup_sunrpc);
128