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>
This commit is contained in:
parent
5247fab5c8
commit
bee42f688c
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user