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>
This commit is contained in:
Родитель
71dfc5fa51
Коммит
cbbb34498f
|
@ -279,6 +279,14 @@ void rpc_clients_notifier_unregister(void)
|
|||
return rpc_pipefs_notifier_unregister(&rpc_clients_block);
|
||||
}
|
||||
|
||||
static void rpc_clnt_set_nodename(struct rpc_clnt *clnt, const char *nodename)
|
||||
{
|
||||
clnt->cl_nodelen = strlen(nodename);
|
||||
if (clnt->cl_nodelen > UNX_MAXNODENAME)
|
||||
clnt->cl_nodelen = UNX_MAXNODENAME;
|
||||
memcpy(clnt->cl_nodename, nodename, clnt->cl_nodelen);
|
||||
}
|
||||
|
||||
static struct rpc_clnt * rpc_new_client(const struct rpc_create_args *args, struct rpc_xprt *xprt)
|
||||
{
|
||||
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
|
|||
}
|
||||
|
||||
/* save the nodename */
|
||||
clnt->cl_nodelen = strlen(init_utsname()->nodename);
|
||||
if (clnt->cl_nodelen > UNX_MAXNODENAME)
|
||||
clnt->cl_nodelen = UNX_MAXNODENAME;
|
||||
memcpy(clnt->cl_nodename, init_utsname()->nodename, clnt->cl_nodelen);
|
||||
rpc_clnt_set_nodename(clnt, utsname()->nodename);
|
||||
rpc_register_client(clnt);
|
||||
return clnt;
|
||||
|
||||
|
@ -521,6 +526,7 @@ rpc_clone_client(struct rpc_clnt *clnt)
|
|||
err = rpc_setup_pipedir(new, clnt->cl_program->pipe_dir_name);
|
||||
if (err != 0)
|
||||
goto out_no_path;
|
||||
rpc_clnt_set_nodename(new, utsname()->nodename);
|
||||
if (new->cl_auth)
|
||||
atomic_inc(&new->cl_auth->au_count);
|
||||
atomic_inc(&clnt->cl_count);
|
||||
|
|
Загрузка…
Ссылка в новой задаче