Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

nfsd: use nfs client rpc callback program

since commit ff7d9756b501744540be65e172d27ee321d86103
"nfsd: use static memory for callback program and stats"
do_probe_callback uses a static callback program
(NFS4_CALLBACK) rather than the one set in clp->cl_callback.cb_prog
as passed in by the client in setclientid (4.0)
or create_session (4.1).

This patches introduces rpc_create_args.prognumber that allows
overriding program->number when creating rpc_clnt.

Signed-off-by: Benny Halevy <bhalevy@panasas.com>
Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>

authored by

Benny Halevy and committed by
J. Bruce Fields
d5b337b4 97eb89bb

+3 -1
+1
fs/nfsd/nfs4callback.c
··· 380 380 .addrsize = sizeof(addr), 381 381 .timeout = &timeparms, 382 382 .program = &cb_program, 383 + .prognumber = cb->cb_prog, 383 384 .version = nfs_cb_version[1]->number, 384 385 .authflavor = RPC_AUTH_UNIX, /* XXX: need AUTH_GSS... */ 385 386 .flags = (RPC_CLNT_CREATE_NOPING | RPC_CLNT_CREATE_QUIET),
+1
include/linux/sunrpc/clnt.h
··· 104 104 const struct rpc_timeout *timeout; 105 105 char *servername; 106 106 struct rpc_program *program; 107 + u32 prognumber; /* overrides program->number */ 107 108 u32 version; 108 109 rpc_authflavor_t authflavor; 109 110 unsigned long flags;
+1 -1
net/sunrpc/clnt.c
··· 174 174 clnt->cl_procinfo = version->procs; 175 175 clnt->cl_maxproc = version->nrprocs; 176 176 clnt->cl_protname = program->name; 177 - clnt->cl_prog = program->number; 177 + clnt->cl_prog = args->prognumber ? : program->number; 178 178 clnt->cl_vers = version->number; 179 179 clnt->cl_stats = program->stats; 180 180 clnt->cl_metrics = rpc_alloc_iostats(clnt);