| [PATCH 6/7] SUNRPC: register service on creation in current network namespace [message #44584 is a reply to message #44579] | 
			Thu, 15 December 2011 16:03   | 
		 
		
			
				
				
				
					
						  
						Stanislav Kinsbursky
						 Messages: 683 Registered: October 2011 
						
					 | 
					Senior Member  | 
					 | 
		 
		 
	 | 
 
	
		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> 
 
--- 
 net/sunrpc/svc.c |    9 +++++---- 
 1 files changed, 5 insertions(+), 4 deletions(-) 
 
diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c 
index 137475a..578f962 100644 
--- a/net/sunrpc/svc.c 
+++ b/net/sunrpc/svc.c 
@@ -20,6 +20,7 @@ 
 #include <linux/module.h> 
 #include <linux/kthread.h> 
 #include <linux/slab.h> 
+#include <linux/nsproxy.h> 
  
 #include <linux/sunrpc/types.h> 
 #include <linux/sunrpc/xdr.h> 
@@ -366,16 +367,16 @@ svc_pool_for_cpu(struct svc_serv *serv, int cpu) 
 	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; 
  
-	err = rpcb_create_local(&init_net); 
+	err = rpcb_create_local(net); 
 	if (err) 
 		return err; 
  
 	/* Remove any stale portmap registrations */ 
-	svc_unregister(serv, &init_net); 
+	svc_unregister(serv, net); 
 	return 0; 
 } 
  
@@ -468,7 +469,7 @@ __svc_create(struct svc_program *prog, unsigned int bufsize, int npools, 
 	} 
  
 	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); 
 			return NULL;
		
		
		
 |  
	| 
		
	 | 
 
 
 |