NFS: Ensure struct nfs_client holds a reference to the net namespace
authorTrond Myklebust <Trond.Myklebust@netapp.com>
Sun, 19 Feb 2012 07:46:49 +0000 (08:46 +0100)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Sun, 19 Feb 2012 07:46:49 +0000 (08:46 +0100)
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>
fs/nfs/client.c

index d0f850ffeb196da15ab90b6b77e911c4c07c68e9..8563585cccec97b0ea9ce0cf60e818147574a055 100644 (file)
@@ -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);