We can often specify the UTS namespace to use when starting an RPC client. However sometimes no UTS namespace is available (specifically during system shutdown as the last NFS mount in a container is unmounted) so fall back to the initial UTS namespace.
Signed-off-by: Matt Helsley <[email protected]> Cc: Cedric Le Goater <[email protected]> Cc: Linux Kernel Mailing List <[email protected]> Cc: [email protected] Cc: Trond Myklebust <[email protected]> Cc: Chuck Lever <[email protected]> Cc: Eric W. Biederman <[email protected]> Cc: Linux Containers <[email protected]> --- net/sunrpc/clnt.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) Index: linux-2.6.28/net/sunrpc/clnt.c =================================================================== --- linux-2.6.28.orig/net/sunrpc/clnt.c +++ linux-2.6.28/net/sunrpc/clnt.c @@ -128,6 +128,7 @@ static struct rpc_clnt * rpc_new_client( struct rpc_version *version; struct rpc_clnt *clnt = NULL; struct rpc_auth *auth; + struct new_utsname *uts_ns = init_utsname(); int err; size_t len; @@ -213,10 +214,12 @@ static struct rpc_clnt * rpc_new_client( } /* save the nodename */ - clnt->cl_nodelen = strlen(init_utsname()->nodename); + if (current->nsproxy != NULL) + uts_ns = utsname(); + clnt->cl_nodelen = strlen(uts_ns->nodename); if (clnt->cl_nodelen > UNX_MAXNODENAME) clnt->cl_nodelen = UNX_MAXNODENAME; - memcpy(clnt->cl_nodename, init_utsname()->nodename, clnt->cl_nodelen); + memcpy(clnt->cl_nodename, uts_ns->nodename, clnt->cl_nodelen); rpc_register_client(clnt); return clnt; -- _______________________________________________ Containers mailing list [email protected] https://lists.linux-foundation.org/mailman/listinfo/containers _______________________________________________ Devel mailing list [email protected] https://openvz.org/mailman/listinfo/devel
