different code path, and if you remount from a different network
context I'm not sure what _should_ happen, anyway. Keep the old one,
I guess?)
(I'm working on a patch adds a network context to nfs_client and then
drills that down to the various places that could use it, which is
more than just these 3, but it's a lot more intrusive and can be done
on top of this. Also, the rpc code is already doing the get_net() and
put_net() reference counting for lifetimes this way. When I add it to
nfs_client I'll have to get that right myself.)
Signed-off-by: Rob Landley <rlandley@parallels.com>
---
fs/nfs/client.c | 3 ++-
fs/nfs/mount_clnt.c | 5 +++--
2 files changed, 7 insertions(+), 3 deletions(-)
@@ -39,6 +39,7 @@
#include <net/ipv6.h>
#include <linux/nfs_xdr.h>
#include <linux/sunrpc/bc_xprt.h>
+#include <linux/user_namespace.h>
#include <asm/system.h>
@@ -619,7 +620,7 @@ static int nfs_create_rpc_client(struct nfs_client *clp,
{
struct rpc_clnt *clnt = NULL;
struct rpc_create_args args = {
- .net = &init_net,
+ .net = current->nsproxy->net_ns,
.protocol = clp->cl_proto,
.address = (struct sockaddr *)&clp->cl_addr,
.addrsize = clp->cl_addrlen,
@@ -14,6 +14,7 @@
#include <linux/sunrpc/clnt.h>
#include <linux/sunrpc/sched.h>
#include <linux/nfs_fs.h>
+#include <linux/user_namespace.h>
#include "internal.h"
#ifdef RPC_DEBUG
@@ -153,7 +156,7 @@ int nfs_mount(struct nfs_mount_request *info)
.rpc_resp = &result,
};
struct rpc_create_args args = {
- .net = &init_net,
+ .net = current->nsproxy->net_ns,
.protocol = info->protocol,
.address = info->sap,
.addrsize = info->salen,
@@ -225,7 +228,7 @@ void nfs_umount(const struct nfs_mount_request *info)
.to_retries = 2,
};
struct rpc_create_args args = {
- .net = &init_net,
+ .net = current->nsproxy->net_ns,
.protocol = IPPROTO_UDP,
.address = info->sap,
.addrsize = info->salen,