aboutsummaryrefslogtreecommitdiffstats
path: root/net/sunrpc
diff options
context:
space:
mode:
authorTrond Myklebust <Trond.Myklebust@netapp.com>2012-04-30 11:52:40 -0400
committerTrond Myklebust <Trond.Myklebust@netapp.com>2012-04-30 11:58:51 -0400
commitcbbb34498f8b2b26cbdc79532c8a2ee5cd1e756a (patch)
treefaa27244aed8ab803846f85944775b0976a1975d /net/sunrpc
parent71dfc5fa5160bb73752f0731539404569a77faca (diff)
SUNRPC: RPC client must use the current utsname hostname string
Now that the rpc client is namespace aware, it needs to use the utsname of the process that created it instead of using the init_utsname. Both rpc_new_client and rpc_clone_client need to be fixed. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com> Cc: Stanislav Kinsbursky <skinsbursky@parallels.com>
Diffstat (limited to 'net/sunrpc')
-rw-r--r--net/sunrpc/clnt.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
index d127bd747527..adf2990acebf 100644
--- a/net/sunrpc/clnt.c
+++ b/net/sunrpc/clnt.c
@@ -279,6 +279,14 @@ void rpc_clients_notifier_unregister(void)
279 return rpc_pipefs_notifier_unregister(&rpc_clients_block); 279 return rpc_pipefs_notifier_unregister(&rpc_clients_block);
280} 280}
281 281
282static void rpc_clnt_set_nodename(struct rpc_clnt *clnt, const char *nodename)
283{
284 clnt->cl_nodelen = strlen(nodename);
285 if (clnt->cl_nodelen > UNX_MAXNODENAME)
286 clnt->cl_nodelen = UNX_MAXNODENAME;
287 memcpy(clnt->cl_nodename, nodename, clnt->cl_nodelen);
288}
289
282static struct rpc_clnt * rpc_new_client(const struct rpc_create_args *args, struct rpc_xprt *xprt) 290static struct rpc_clnt * rpc_new_client(const struct rpc_create_args *args, struct rpc_xprt *xprt)
283{ 291{
284 const struct rpc_program *program = args->program; 292 const struct rpc_program *program = args->program;
@@ -359,10 +367,7 @@ static struct rpc_clnt * rpc_new_client(const struct rpc_create_args *args, stru
359 } 367 }
360 368
361 /* save the nodename */ 369 /* save the nodename */
362 clnt->cl_nodelen = strlen(init_utsname()->nodename); 370 rpc_clnt_set_nodename(clnt, utsname()->nodename);
363 if (clnt->cl_nodelen > UNX_MAXNODENAME)
364 clnt->cl_nodelen = UNX_MAXNODENAME;
365 memcpy(clnt->cl_nodename, init_utsname()->nodename, clnt->cl_nodelen);
366 rpc_register_client(clnt); 371 rpc_register_client(clnt);
367 return clnt; 372 return clnt;
368 373
@@ -521,6 +526,7 @@ rpc_clone_client(struct rpc_clnt *clnt)
521 err = rpc_setup_pipedir(new, clnt->cl_program->pipe_dir_name); 526 err = rpc_setup_pipedir(new, clnt->cl_program->pipe_dir_name);
522 if (err != 0) 527 if (err != 0)
523 goto out_no_path; 528 goto out_no_path;
529 rpc_clnt_set_nodename(new, utsname()->nodename);
524 if (new->cl_auth) 530 if (new->cl_auth)
525 atomic_inc(&new->cl_auth->au_count); 531 atomic_inc(&new->cl_auth->au_count);
526 atomic_inc(&clnt->cl_count); 532 atomic_inc(&clnt->cl_count);