diff options
author | Pavel Emelyanov <xemul@parallels.com> | 2010-09-27 12:01:27 +0200 |
---|---|---|
committer | J. Bruce Fields <bfields@redhat.com> | 2010-09-27 16:16:12 +0200 |
commit | 2f72c9b73730c335381b13e2bd221abe1acea394 (patch) | |
tree | c8b59e83724b665bfa4d5776ba4f734f32451858 /net/sunrpc | |
parent | sunrpc: Tag svc_xprt with net (diff) | |
download | linux-2f72c9b73730c335381b13e2bd221abe1acea394.tar.xz linux-2f72c9b73730c335381b13e2bd221abe1acea394.zip |
sunrpc: The per-net skeleton
Register empty per-net operations for the sunrpc layer.
Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'net/sunrpc')
-rw-r--r-- | net/sunrpc/netns.h | 12 | ||||
-rw-r--r-- | net/sunrpc/sunrpc_syms.c | 31 |
2 files changed, 42 insertions, 1 deletions
diff --git a/net/sunrpc/netns.h b/net/sunrpc/netns.h new file mode 100644 index 000000000000..b2d18af2815e --- /dev/null +++ b/net/sunrpc/netns.h @@ -0,0 +1,12 @@ +#ifndef __SUNRPC_NETNS_H__ +#define __SUNRPC_NETNS_H__ + +#include <net/net_namespace.h> +#include <net/netns/generic.h> + +struct sunrpc_net { +}; + +extern int sunrpc_net_id; + +#endif diff --git a/net/sunrpc/sunrpc_syms.c b/net/sunrpc/sunrpc_syms.c index c0d085013a2b..faa23229bd25 100644 --- a/net/sunrpc/sunrpc_syms.c +++ b/net/sunrpc/sunrpc_syms.c @@ -22,6 +22,26 @@ #include <linux/sunrpc/rpc_pipe_fs.h> #include <linux/sunrpc/xprtsock.h> +#include "netns.h" + +int sunrpc_net_id; + +static __net_init int sunrpc_init_net(struct net *net) +{ + return 0; +} + +static __net_exit void sunrpc_exit_net(struct net *net) +{ +} + +static struct pernet_operations sunrpc_net_ops = { + .init = sunrpc_init_net, + .exit = sunrpc_exit_net, + .id = &sunrpc_net_id, + .size = sizeof(struct sunrpc_net), +}; + extern struct cache_detail ip_map_cache, unix_gid_cache; extern void cleanup_rpcb_clnt(void); @@ -38,18 +58,26 @@ init_sunrpc(void) err = rpcauth_init_module(); if (err) goto out3; + + cache_initialize(); + + err = register_pernet_subsys(&sunrpc_net_ops); + if (err) + goto out4; #ifdef RPC_DEBUG rpc_register_sysctl(); #endif #ifdef CONFIG_PROC_FS rpc_proc_init(); #endif - cache_initialize(); cache_register(&ip_map_cache); cache_register(&unix_gid_cache); svc_init_xprt_sock(); /* svc sock transport */ init_socket_xprt(); /* clnt sock transport */ return 0; + +out4: + rpcauth_remove_module(); out3: rpc_destroy_mempool(); out2: @@ -69,6 +97,7 @@ cleanup_sunrpc(void) rpc_destroy_mempool(); cache_unregister(&ip_map_cache); cache_unregister(&unix_gid_cache); + unregister_pernet_subsys(&sunrpc_net_ops); #ifdef RPC_DEBUG rpc_unregister_sysctl(); #endif |