|
@@ -354,6 +354,41 @@ svc_pool_for_cpu(struct svc_serv *serv, int cpu)
|
|
|
return &serv->sv_pools[pidx % serv->sv_nrpools];
|
|
|
}
|
|
|
|
|
|
+static int svc_rpcb_setup(struct svc_serv *serv)
|
|
|
+{
|
|
|
+ int err;
|
|
|
+
|
|
|
+ err = rpcb_create_local();
|
|
|
+ if (err)
|
|
|
+ return err;
|
|
|
+
|
|
|
+ /* Remove any stale portmap registrations */
|
|
|
+ svc_unregister(serv);
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static void svc_rpcb_cleanup(struct svc_serv *serv)
|
|
|
+{
|
|
|
+ svc_unregister(serv);
|
|
|
+ rpcb_put_local();
|
|
|
+}
|
|
|
+
|
|
|
+static int svc_uses_rpcbind(struct svc_serv *serv)
|
|
|
+{
|
|
|
+ struct svc_program *progp;
|
|
|
+ unsigned int i;
|
|
|
+
|
|
|
+ for (progp = serv->sv_program; progp; progp = progp->pg_next) {
|
|
|
+ for (i = 0; i < progp->pg_nvers; i++) {
|
|
|
+ if (progp->pg_vers[i] == NULL)
|
|
|
+ continue;
|
|
|
+ if (progp->pg_vers[i]->vs_hidden == 0)
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
|
|
|
/*
|
|
|
* Create an RPC service
|