aboutsummaryrefslogtreecommitdiffstats
path: root/net/sunrpc/clnt.c
diff options
context:
space:
mode:
authorTrond Myklebust <Trond.Myklebust@netapp.com>2006-03-20 13:44:09 -0500
committerTrond Myklebust <Trond.Myklebust@netapp.com>2006-03-20 13:44:09 -0500
commit12de3b35ea549c5819f287508d7afab0bf3ac44d (patch)
treec1b7f96236c4b19bcd911705017bf31bcbc2b605 /net/sunrpc/clnt.c
parent24c5d9d7ea5a64fb5f157d17aa2c67a3300f8a08 (diff)
SUNRPC: Ensure that rpc_mkpipe returns a refcounted dentry
If not, we cannot guarantee that idmap->idmap_dentry, gss_auth->dentry and clnt->cl_dentry are valid dentries. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'net/sunrpc/clnt.c')
-rw-r--r--net/sunrpc/clnt.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
index d78479782045..a6d7c332dd49 100644
--- a/net/sunrpc/clnt.c
+++ b/net/sunrpc/clnt.c
@@ -240,6 +240,7 @@ rpc_clone_client(struct rpc_clnt *clnt)
240 new->cl_autobind = 0; 240 new->cl_autobind = 0;
241 new->cl_oneshot = 0; 241 new->cl_oneshot = 0;
242 new->cl_dead = 0; 242 new->cl_dead = 0;
243 dget(new->cl_dentry);
243 rpc_init_rtt(&new->cl_rtt_default, clnt->cl_xprt->timeout.to_initval); 244 rpc_init_rtt(&new->cl_rtt_default, clnt->cl_xprt->timeout.to_initval);
244 if (new->cl_auth) 245 if (new->cl_auth)
245 atomic_inc(&new->cl_auth->au_count); 246 atomic_inc(&new->cl_auth->au_count);
@@ -314,6 +315,8 @@ rpc_destroy_client(struct rpc_clnt *clnt)
314 if (clnt->cl_server != clnt->cl_inline_name) 315 if (clnt->cl_server != clnt->cl_inline_name)
315 kfree(clnt->cl_server); 316 kfree(clnt->cl_server);
316out_free: 317out_free:
318 if (clnt->cl_dentry)
319 dput(clnt->cl_dentry);
317 kfree(clnt); 320 kfree(clnt);
318 return 0; 321 return 0;
319} 322}