On Fri, 2013-08-09 at 12:50 -0400, Chuck Lever wrote: > The rpc_client_register() helper was added in commit e73f4cc0, > "SUNRPC: split client creation routine into setup and registration," > Mon Jun 24 11:52:52 2013. > > I'd like to invoke rpc_client_register() from a context where a > struct rpc_create_args is not available. There appear to be only > two fields of interest in struct rpc_create_args: .program and > .authflavor . > > Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> > Cc: Stanislav Kinsbursky <skinsbursky@xxxxxxxxxxxxx> > --- > net/sunrpc/clnt.c | 12 ++++++------ > 1 file changed, 6 insertions(+), 6 deletions(-) > > diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c > index 74f6a70..f9e3926 100644 > --- a/net/sunrpc/clnt.c > +++ b/net/sunrpc/clnt.c > @@ -279,10 +279,10 @@ static void rpc_clnt_set_nodename(struct rpc_clnt *clnt, const char *nodename) > memcpy(clnt->cl_nodename, nodename, clnt->cl_nodelen); > } > > -static int rpc_client_register(const struct rpc_create_args *args, > - struct rpc_clnt *clnt) > +static int rpc_client_register(struct rpc_clnt *clnt, > + rpc_authflavor_t pseudoflavor) > { > - const struct rpc_program *program = args->program; > + const struct rpc_program *program = clnt->cl_program; > struct rpc_auth *auth; > struct net *net = rpc_net_ns(clnt); > struct super_block *pipefs_sb; > @@ -299,10 +299,10 @@ static int rpc_client_register(const struct rpc_create_args *args, > if (pipefs_sb) > rpc_put_sb_net(net); > > - auth = rpcauth_create(args->authflavor, clnt); > + auth = rpcauth_create(pseudoflavor, clnt); > if (IS_ERR(auth)) { > dprintk("RPC: Couldn't create auth handle (flavor %u)\n", > - args->authflavor); > + pseudoflavor); > err = PTR_ERR(auth); > goto err_auth; > } > @@ -384,7 +384,7 @@ static struct rpc_clnt * rpc_new_client(const struct rpc_create_args *args, stru > /* save the nodename */ > rpc_clnt_set_nodename(clnt, utsname()->nodename); > > - err = rpc_client_register(args, clnt); > + err = rpc_client_register(clnt, args->authflavor); > if (err) > goto out_no_path; > return clnt; > This conflicts a bit with the new management code for the rpc_clnt's rpc_pipefs. The fixup above is trivial, but I think that you might want to look into whether or not the new code changes anything for your rpc_auth strategy. In particular note that the new code uses the rpc_clnt->cl_parent chain in order to implement sharing of the RPCSEC_GSS caches and pipe upcalls. -- Trond Myklebust Linux NFS client maintainer NetApp Trond.Myklebust@xxxxxxxxxx www.netapp.com ��.n��������+%������w��{.n�����{��w���jg��������ݢj����G�������j:+v���w�m������w�������h�����٥