Commit bee42f68 authored by Stanislav Kinsbursky's avatar Stanislav Kinsbursky Committed by Trond Myklebust

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: default avatarStanislav Kinsbursky <skinsbursky@parallels.com>
Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent 5247fab5
...@@ -20,6 +20,7 @@ ...@@ -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) ...@@ -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, ...@@ -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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment