Skip to content

Commit

Permalink
SUNRPC: register service on creation in current network namespace
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Stanislav Kinsbursky authored and Trond Myklebust committed Feb 1, 2012
1 parent 5247fab commit bee42f6
Showing 1 changed file with 5 additions and 4 deletions.
9 changes: 5 additions & 4 deletions net/sunrpc/svc.c
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down Expand Up @@ -368,16 +369,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;
}

Expand Down Expand Up @@ -470,7 +471,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;
Expand Down

0 comments on commit bee42f6

Please sign in to comment.