sunrpc: The per-net skeleton
authorPavel Emelyanov <xemul@parallels.com>
Mon, 27 Sep 2010 10:01:27 +0000 (14:01 +0400)
committerJ. Bruce Fields <bfields@redhat.com>
Mon, 27 Sep 2010 14:16:12 +0000 (10:16 -0400)
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>
net/sunrpc/netns.h [new file with mode: 0644]
net/sunrpc/sunrpc_syms.c

diff --git a/net/sunrpc/netns.h b/net/sunrpc/netns.h
new file mode 100644 (file)
index 0000000..b2d18af
--- /dev/null
@@ -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
index c0d085013a2be26f7bf3f34e195cebfc0a716039..faa23229bd25a31c380b8f3eaa5c8c632cedb505 100644 (file)
 #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