aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorTrond Myklebust <Trond.Myklebust@netapp.com>2012-02-19 08:46:49 +0100
committerTrond Myklebust <Trond.Myklebust@netapp.com>2012-02-19 08:46:49 +0100
commitabd96698613eb27415e7028b6100be930920adc6 (patch)
tree8049bdcf2d4d9d699f26570424189261680f8a91 /fs
parentNFS: Ensure that the nfs_client 'net' field is always set (diff)
downloadlinux-dev-abd96698613eb27415e7028b6100be930920adc6.tar.xz
linux-dev-abd96698613eb27415e7028b6100be930920adc6.zip
NFS: Ensure struct nfs_client holds a reference to the net namespace
Otherwise we have no guarantee that the net namespace won't just disappear from underneath us once the task that created it is destroyed. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com> Cc: Stanislav Kinsbursky <skinsbursky@parallels.com>
Diffstat (limited to 'fs')
-rw-r--r--fs/nfs/client.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/nfs/client.c b/fs/nfs/client.c
index d0f850ffeb19..8563585cccec 100644
--- a/fs/nfs/client.c
+++ b/fs/nfs/client.c
@@ -172,7 +172,7 @@ static struct nfs_client *nfs_alloc_client(const struct nfs_client_initdata *cl_
clp->cl_rpcclient = ERR_PTR(-EINVAL);
clp->cl_proto = cl_init->proto;
- clp->net = cl_init->net;
+ clp->net = get_net(cl_init->net);
#ifdef CONFIG_NFS_V4
err = nfs_get_cb_ident_idr(clp, cl_init->minorversion);
@@ -300,6 +300,7 @@ static void nfs_free_client(struct nfs_client *clp)
nfs4_deviceid_purge_client(clp);
+ put_net(clp->net);
kfree(clp->cl_hostname);
kfree(clp->server_scope);
kfree(clp);