From: Matt Helsley Subject: [RFC][PATCH 2/4] sunrpc: Use utsnamespaces Date: Mon, 05 Jan 2009 17:13:16 -0800 Message-ID: <20090106011314.961946803@us.ibm.com> References: <20090106011314.534653345@us.ibm.com> Cc: "J. Bruce Fields" , Cedric Le Goater , Linux Kernel Mailing List , linux-nfs@vger.kernel.org, Trond Myklebust , Chuck Lever , "Eric W. Biederman" , Matt Helsley , Linux Containers To: Linux Containers Return-path: Received: from e1.ny.us.ibm.com ([32.97.182.141]:50142 "EHLO e1.ny.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751199AbZAFBNU (ORCPT ); Mon, 5 Jan 2009 20:13:20 -0500 Sender: linux-nfs-owner@vger.kernel.org List-ID: 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 Cc: Cedric Le Goater Cc: Linux Kernel Mailing List Cc: linux-nfs@vger.kernel.org Cc: Trond Myklebust Cc: Chuck Lever Cc: Eric W. Biederman Cc: Linux Containers --- 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; --