SUNRPC: register service stats /proc entries in passed network namespace context
authorStanislav Kinsbursky <skinsbursky@parallels.com>
Tue, 6 Dec 2011 13:42:49 +0000 (16:42 +0300)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Wed, 1 Feb 2012 00:28:18 +0000 (19:28 -0500)
This patch makes it possible to create NFSd program entry ("/proc/net/rpc/nfsd")
in passed network namespace context instead of hard-coded "init_net".

Signed-off-by: Stanislav Kinsbursky <skinsbursky@parallels.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
fs/nfsd/stats.c
include/linux/sunrpc/stats.h
net/sunrpc/stats.c

index a2e2402b2afb5a45200b5902fadabcb144d16ebf..6d4521feb6e339729d9e9e8583088fcd1e0ec6f9 100644 (file)
@@ -25,6 +25,7 @@
 #include <linux/module.h>
 #include <linux/sunrpc/stats.h>
 #include <linux/nfsd/stats.h>
+#include <net/net_namespace.h>
 
 #include "nfsd.h"
 
@@ -94,11 +95,11 @@ static const struct file_operations nfsd_proc_fops = {
 void
 nfsd_stat_init(void)
 {
-       svc_proc_register(&nfsd_svcstats, &nfsd_proc_fops);
+       svc_proc_register(&init_net, &nfsd_svcstats, &nfsd_proc_fops);
 }
 
 void
 nfsd_stat_shutdown(void)
 {
-       svc_proc_unregister("nfsd");
+       svc_proc_unregister(&init_net, "nfsd");
 }
index c5aaf7ddb5cf4e133f012bd4b79a2e7e003b1c0a..76f3f7cc6e33703c962763136fe3365294685705 100644 (file)
@@ -61,9 +61,9 @@ void                  rpc_modcount(struct inode *, int);
 struct proc_dir_entry *        rpc_proc_register(struct net *,struct rpc_stat *);
 void                   rpc_proc_unregister(struct net *,const char *);
 void                   rpc_proc_zero(struct rpc_program *);
-struct proc_dir_entry *        svc_proc_register(struct svc_stat *,
+struct proc_dir_entry *        svc_proc_register(struct net *, struct svc_stat *,
                                          const struct file_operations *);
-void                   svc_proc_unregister(const char *);
+void                   svc_proc_unregister(struct net *, const char *);
 
 void                   svc_seq_show(struct seq_file *,
                                     const struct svc_stat *);
@@ -73,9 +73,9 @@ static inline struct proc_dir_entry *rpc_proc_register(struct net *net, struct r
 static inline void rpc_proc_unregister(struct net *net, const char *p) {}
 static inline void rpc_proc_zero(struct rpc_program *p) {}
 
-static inline struct proc_dir_entry *svc_proc_register(struct svc_stat *s,
+static inline struct proc_dir_entry *svc_proc_register(struct net *net, struct svc_stat *s,
                                                       const struct file_operations *f) { return NULL; }
-static inline void svc_proc_unregister(const char *p) {}
+static inline void svc_proc_unregister(struct net *net, const char *p) {}
 
 static inline void svc_seq_show(struct seq_file *seq,
                                const struct svc_stat *st) {}
index f0f6e7ceadd59ee9383664579ecb3d32c588bd16..3c4f6888c89144b06b30c1e4c53c1a0085a3d4c9 100644 (file)
@@ -241,18 +241,18 @@ rpc_proc_unregister(struct net *net, const char *name)
 EXPORT_SYMBOL_GPL(rpc_proc_unregister);
 
 struct proc_dir_entry *
-svc_proc_register(struct svc_stat *statp, const struct file_operations *fops)
+svc_proc_register(struct net *net, struct svc_stat *statp, const struct file_operations *fops)
 {
-       return do_register(&init_net, statp->program->pg_name, statp, fops);
+       return do_register(net, statp->program->pg_name, statp, fops);
 }
 EXPORT_SYMBOL_GPL(svc_proc_register);
 
 void
-svc_proc_unregister(const char *name)
+svc_proc_unregister(struct net *net, const char *name)
 {
        struct sunrpc_net *sn;
 
-       sn = net_generic(&init_net, sunrpc_net_id);
+       sn = net_generic(net, sunrpc_net_id);
        remove_proc_entry(name, sn->proc_net_rpc);
 }
 EXPORT_SYMBOL_GPL(svc_proc_unregister);