Переглянути джерело

SUNRPC: register service on creation in current network namespace

Service, using rpcbind (Lockd, NFSd) are starting from userspace call and thus
we can use current network namespace.
There could be a problem with NFSd service, because it's creation can be called
through NFSd fs from different network namespace. But this is a part of "NFSd
per net ns" task and will be fixed in future.

Signed-off-by: Stanislav Kinsbursky <skinsbursky@parallels.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Stanislav Kinsbursky 13 роки тому
батько
коміт
bee42f688c
1 змінених файлів з 5 додано та 4 видалено
  1. 5 4
      net/sunrpc/svc.c

+ 5 - 4
net/sunrpc/svc.c

@@ -20,6 +20,7 @@
 #include <linux/module.h>
 #include <linux/module.h>
 #include <linux/kthread.h>
 #include <linux/kthread.h>
 #include <linux/slab.h>
 #include <linux/slab.h>
+#include <linux/nsproxy.h>
 
 
 #include <linux/sunrpc/types.h>
 #include <linux/sunrpc/types.h>
 #include <linux/sunrpc/xdr.h>
 #include <linux/sunrpc/xdr.h>
@@ -368,16 +369,16 @@ svc_pool_for_cpu(struct svc_serv *serv, int cpu)
 	return &serv->sv_pools[pidx % serv->sv_nrpools];
 	return &serv->sv_pools[pidx % serv->sv_nrpools];
 }
 }
 
 
-static int svc_rpcb_setup(struct svc_serv *serv)
+static int svc_rpcb_setup(struct svc_serv *serv, struct net *net)
 {
 {
 	int err;
 	int err;
 
 
-	err = rpcb_create_local(&init_net);
+	err = rpcb_create_local(net);
 	if (err)
 	if (err)
 		return err;
 		return err;
 
 
 	/* Remove any stale portmap registrations */
 	/* Remove any stale portmap registrations */
-	svc_unregister(serv, &init_net);
+	svc_unregister(serv, net);
 	return 0;
 	return 0;
 }
 }
 
 
@@ -470,7 +471,7 @@ __svc_create(struct svc_program *prog, unsigned int bufsize, int npools,
 	}
 	}
 
 
 	if (svc_uses_rpcbind(serv)) {
 	if (svc_uses_rpcbind(serv)) {
-	       	if (svc_rpcb_setup(serv) < 0) {
+		if (svc_rpcb_setup(serv, current->nsproxy->net_ns) < 0) {
 			kfree(serv->sv_pools);
 			kfree(serv->sv_pools);
 			kfree(serv);
 			kfree(serv);
 			return NULL;
 			return NULL;