In preparation for adding rpcbind version 4 support to svc_register, clean it up. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> --- include/linux/sunrpc/svc.h | 4 ++- net/sunrpc/svc.c | 61 +++++++++++++++++++++++++++----------------- 2 files changed, 41 insertions(+), 24 deletions(-) diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h index a27178b..05312e7 100644 --- a/include/linux/sunrpc/svc.h +++ b/include/linux/sunrpc/svc.h @@ -394,7 +394,9 @@ struct svc_serv * svc_create_pooled(struct svc_program *, unsigned int, int svc_set_num_threads(struct svc_serv *, struct svc_pool *, int); void svc_destroy(struct svc_serv *); int svc_process(struct svc_rqst *); -int svc_register(struct svc_serv *, int, unsigned short); +int svc_register(const struct svc_serv *, const unsigned short, + const unsigned short); + void svc_wake_up(struct svc_serv *); void svc_reserve(struct svc_rqst *rqstp, int space); struct svc_pool * svc_pool_for_cpu(struct svc_serv *serv, int cpu); diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c index a41b163..c31a1e4 100644 --- a/net/sunrpc/svc.c +++ b/net/sunrpc/svc.c @@ -749,43 +749,58 @@ svc_exit_thread(struct svc_rqst *rqstp) } EXPORT_SYMBOL(svc_exit_thread); -/* - * Register an RPC service with the local portmapper. - * To unregister a service, call this routine with - * proto and port == 0. +static int __svc_register(const u32 program, const u32 version, + sa_family_t family, + const unsigned short protocol, + const unsigned short port) +{ + int error, result; + + error = rpcb_register(program, version, protocol, port, &result); + if (!result) + error = -EACCES; + return error; +} + +/** + * svc_register - register an RPC service with the local portmapper + * @serv: svc_serv struct for the service to register + * @protocol: transport protocol number to advertise + * @port: port to advertise + * */ -int -svc_register(struct svc_serv *serv, int proto, unsigned short port) +int svc_register(const struct svc_serv *serv, const unsigned short protocol, + const unsigned short port) { - struct svc_program *progp; - unsigned int i; - int error = 0, dummy; + struct svc_program *progp; + u32 version; + int error = 0; - BUG_ON(proto == 0 && port == 0); + BUG_ON(protocol == 0 && port == 0); for (progp = serv->sv_program; progp; progp = progp->pg_next) { - for (i = 0; i < progp->pg_nvers; i++) { - if (progp->pg_vers[i] == NULL) + for (version = 0; version < progp->pg_nvers; version++) { + if (progp->pg_vers[version] == NULL) continue; - dprintk("svc: svc_register(%s, %s, %d, %d)%s\n", + dprintk("svc: svc_register(%s, %u, %u, %s, %u)%s\n", progp->pg_name, - proto == IPPROTO_UDP? "udp" : "tcp", + version, + serv->sv_family, + protocol == IPPROTO_UDP ? + "udp" : "tcp", port, - i, - progp->pg_vers[i]->vs_hidden? - " (but not telling portmap)" : ""); + progp->pg_vers[version]->vs_hidden ? + " (but not telling portmap)" : ""); - if (progp->pg_vers[i]->vs_hidden) + if (progp->pg_vers[version]->vs_hidden) continue; - error = rpcb_register(progp->pg_prog, i, proto, port, &dummy); + error = __svc_register(progp->pg_prog, version, + serv->sv_family, protocol, + port); if (error < 0) break; - if (port && !dummy) { - error = -EACCES; - break; - } } } -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html