xref: /openbmc/linux/net/sunrpc/sunrpc_syms.c (revision 572caba4)
109c434b8SThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only
21da177e4SLinus Torvalds /*
31da177e4SLinus Torvalds  * linux/net/sunrpc/sunrpc_syms.c
41da177e4SLinus Torvalds  *
51da177e4SLinus Torvalds  * Symbols exported by the sunrpc module.
61da177e4SLinus Torvalds  *
71da177e4SLinus Torvalds  * Copyright (C) 1997 Olaf Kirch <okir@monad.swb.de>
81da177e4SLinus Torvalds  */
91da177e4SLinus Torvalds 
101da177e4SLinus Torvalds #include <linux/module.h>
111da177e4SLinus Torvalds 
121da177e4SLinus Torvalds #include <linux/types.h>
131da177e4SLinus Torvalds #include <linux/uio.h>
141da177e4SLinus Torvalds #include <linux/unistd.h>
151da177e4SLinus Torvalds #include <linux/init.h>
161da177e4SLinus Torvalds 
171da177e4SLinus Torvalds #include <linux/sunrpc/sched.h>
181da177e4SLinus Torvalds #include <linux/sunrpc/clnt.h>
191da177e4SLinus Torvalds #include <linux/sunrpc/svc.h>
201da177e4SLinus Torvalds #include <linux/sunrpc/svcsock.h>
211da177e4SLinus Torvalds #include <linux/sunrpc/auth.h>
221da177e4SLinus Torvalds #include <linux/workqueue.h>
231da177e4SLinus Torvalds #include <linux/sunrpc/rpc_pipe_fs.h>
2449c36fccS\"Talpey, Thomas\ #include <linux/sunrpc/xprtsock.h>
251da177e4SLinus Torvalds 
26f45db2b9SNeilBrown #include "sunrpc.h"
2774678748SOlga Kornievskaia #include "sysfs.h"
282f72c9b7SPavel Emelyanov #include "netns.h"
292f72c9b7SPavel Emelyanov 
30c7d03a00SAlexey Dobriyan unsigned int sunrpc_net_id;
31a1db410dSStanislav Kinsbursky EXPORT_SYMBOL_GPL(sunrpc_net_id);
322f72c9b7SPavel Emelyanov 
332f72c9b7SPavel Emelyanov static __net_init int sunrpc_init_net(struct net *net)
342f72c9b7SPavel Emelyanov {
354f42d0d5SPavel Emelyanov 	int err;
3670abc49bSStanislav Kinsbursky 	struct sunrpc_net *sn = net_generic(net, sunrpc_net_id);
374f42d0d5SPavel Emelyanov 
384f42d0d5SPavel Emelyanov 	err = rpc_proc_init(net);
394f42d0d5SPavel Emelyanov 	if (err)
404f42d0d5SPavel Emelyanov 		goto err_proc;
414f42d0d5SPavel Emelyanov 
4290d51b02SPavel Emelyanov 	err = ip_map_cache_create(net);
4390d51b02SPavel Emelyanov 	if (err)
4490d51b02SPavel Emelyanov 		goto err_ipmap;
4590d51b02SPavel Emelyanov 
4673393232SStanislav Kinsbursky 	err = unix_gid_cache_create(net);
4773393232SStanislav Kinsbursky 	if (err)
4873393232SStanislav Kinsbursky 		goto err_unixgid;
4973393232SStanislav Kinsbursky 
504b9a445eSJeff Layton 	err = rpc_pipefs_init_net(net);
514b9a445eSJeff Layton 	if (err)
524b9a445eSJeff Layton 		goto err_pipefs;
534b9a445eSJeff Layton 
5470abc49bSStanislav Kinsbursky 	INIT_LIST_HEAD(&sn->all_clients);
5570abc49bSStanislav Kinsbursky 	spin_lock_init(&sn->rpc_client_lock);
561d96e80fSStanislav Kinsbursky 	spin_lock_init(&sn->rpcb_clnt_lock);
572f72c9b7SPavel Emelyanov 	return 0;
584f42d0d5SPavel Emelyanov 
594b9a445eSJeff Layton err_pipefs:
604b9a445eSJeff Layton 	unix_gid_cache_destroy(net);
6173393232SStanislav Kinsbursky err_unixgid:
6273393232SStanislav Kinsbursky 	ip_map_cache_destroy(net);
6390d51b02SPavel Emelyanov err_ipmap:
6490d51b02SPavel Emelyanov 	rpc_proc_exit(net);
654f42d0d5SPavel Emelyanov err_proc:
664f42d0d5SPavel Emelyanov 	return err;
672f72c9b7SPavel Emelyanov }
682f72c9b7SPavel Emelyanov 
692f72c9b7SPavel Emelyanov static __net_exit void sunrpc_exit_net(struct net *net)
702f72c9b7SPavel Emelyanov {
714112be70SVasily Averin 	struct sunrpc_net *sn = net_generic(net, sunrpc_net_id);
724112be70SVasily Averin 
734b9a445eSJeff Layton 	rpc_pipefs_exit_net(net);
7473393232SStanislav Kinsbursky 	unix_gid_cache_destroy(net);
7590d51b02SPavel Emelyanov 	ip_map_cache_destroy(net);
764f42d0d5SPavel Emelyanov 	rpc_proc_exit(net);
774112be70SVasily Averin 	WARN_ON_ONCE(!list_empty(&sn->all_clients));
782f72c9b7SPavel Emelyanov }
792f72c9b7SPavel Emelyanov 
802f72c9b7SPavel Emelyanov static struct pernet_operations sunrpc_net_ops = {
812f72c9b7SPavel Emelyanov 	.init = sunrpc_init_net,
822f72c9b7SPavel Emelyanov 	.exit = sunrpc_exit_net,
832f72c9b7SPavel Emelyanov 	.id = &sunrpc_net_id,
842f72c9b7SPavel Emelyanov 	.size = sizeof(struct sunrpc_net),
852f72c9b7SPavel Emelyanov };
862f72c9b7SPavel Emelyanov 
871da177e4SLinus Torvalds static int __init
881da177e4SLinus Torvalds init_sunrpc(void)
891da177e4SLinus Torvalds {
90adae0fe0SStanislav Kinsbursky 	int err = rpc_init_mempool();
911da177e4SLinus Torvalds 	if (err)
921da177e4SLinus Torvalds 		goto out;
935d8d9a4dSTrond Myklebust 	err = rpcauth_init_module();
945d8d9a4dSTrond Myklebust 	if (err)
95adae0fe0SStanislav Kinsbursky 		goto out2;
962f72c9b7SPavel Emelyanov 
972f72c9b7SPavel Emelyanov 	cache_initialize();
982f72c9b7SPavel Emelyanov 
992f72c9b7SPavel Emelyanov 	err = register_pernet_subsys(&sunrpc_net_ops);
1002f72c9b7SPavel Emelyanov 	if (err)
101adae0fe0SStanislav Kinsbursky 		goto out3;
102adae0fe0SStanislav Kinsbursky 
103adae0fe0SStanislav Kinsbursky 	err = register_rpc_pipefs();
104adae0fe0SStanislav Kinsbursky 	if (err)
1052f72c9b7SPavel Emelyanov 		goto out4;
106b4b9d2ccSJeff Layton 
10774678748SOlga Kornievskaia 	err = rpc_sysfs_init();
10874678748SOlga Kornievskaia 	if (err)
10974678748SOlga Kornievskaia 		goto out5;
11074678748SOlga Kornievskaia 
111f9c72d10SJeff Layton 	sunrpc_debugfs_init();
112f895b252SJeff Layton #if IS_ENABLED(CONFIG_SUNRPC_DEBUG)
1131da177e4SLinus Torvalds 	rpc_register_sysctl();
1141da177e4SLinus Torvalds #endif
115360d8738STom Tucker 	svc_init_xprt_sock();	/* svc sock transport */
116360d8738STom Tucker 	init_socket_xprt();	/* clnt sock transport */
1175d8d9a4dSTrond Myklebust 	return 0;
1182f72c9b7SPavel Emelyanov 
11974678748SOlga Kornievskaia out5:
12074678748SOlga Kornievskaia 	unregister_rpc_pipefs();
1212f72c9b7SPavel Emelyanov out4:
122adae0fe0SStanislav Kinsbursky 	unregister_pernet_subsys(&sunrpc_net_ops);
1235d8d9a4dSTrond Myklebust out3:
124adae0fe0SStanislav Kinsbursky 	rpcauth_remove_module();
1255d8d9a4dSTrond Myklebust out2:
126adae0fe0SStanislav Kinsbursky 	rpc_destroy_mempool();
1271da177e4SLinus Torvalds out:
1281da177e4SLinus Torvalds 	return err;
1291da177e4SLinus Torvalds }
1301da177e4SLinus Torvalds 
1311da177e4SLinus Torvalds static void __exit
1321da177e4SLinus Torvalds cleanup_sunrpc(void)
1331da177e4SLinus Torvalds {
13474678748SOlga Kornievskaia 	rpc_sysfs_exit();
135c929ea0bSKinglong Mee 	rpc_cleanup_clids();
136*572caba4SOlga Kornievskaia 	xprt_cleanup_ids();
137f5c2187cSTrond Myklebust 	rpcauth_remove_module();
138282b32e1SChuck Lever 	cleanup_socket_xprt();
139360d8738STom Tucker 	svc_cleanup_xprt_sock();
140b4b9d2ccSJeff Layton 	sunrpc_debugfs_exit();
1411da177e4SLinus Torvalds 	unregister_rpc_pipefs();
1421da177e4SLinus Torvalds 	rpc_destroy_mempool();
1432f72c9b7SPavel Emelyanov 	unregister_pernet_subsys(&sunrpc_net_ops);
144f45db2b9SNeilBrown 	auth_domain_cleanup();
145f895b252SJeff Layton #if IS_ENABLED(CONFIG_SUNRPC_DEBUG)
1461da177e4SLinus Torvalds 	rpc_unregister_sysctl();
1471da177e4SLinus Torvalds #endif
14875de874fSJesper Dangaard Brouer 	rcu_barrier(); /* Wait for completion of call_rcu()'s */
1491da177e4SLinus Torvalds }
1501da177e4SLinus Torvalds MODULE_LICENSE("GPL");
151405d8f8bSTrond Myklebust fs_initcall(init_sunrpc); /* Ensure we're initialised before nfs */
1521da177e4SLinus Torvalds module_exit(cleanup_sunrpc);
153