nfsd/sunrpc: abstract out svc_set_num_threads to sv_ops
Subsystems (2)
RFC PATCH v4 5/7 nfsd/sunrpc: abstract out svc_set_num_threads to sv_ops
From: Jeff Layton <[email protected]>
Add an operation that will do setup of the service. In the case of a classic thread-based service that means starting up threads. In the case of a workqueue-based service, the setup will do something different.
Signed-off-by Shirley Ma <[email protected]>
Acked-by Jeff Layton <[email protected]>
Tested-by Shirley Ma <[email protected]>
---
fs/nfsd/nfssvc.c +5 -3
@@ -395,6 +395,7 @@ static struct svc_serv_ops nfsd_thread_sv_ops = { .svo_shutdown = nfsd_last_thread, .svo_function = nfsd, .svo_enqueue_xprt = svc_xprt_do_enqueue, + .svo_setup = svc_set_num_threads, .svo_module = THIS_MODULE, };
@@ -507,8 +508,8 @@ int nfsd_set_nrthreads(int n, int *nthreads, struct net *net)/* apply the new numbers */ svc_get (nn->nfsd_serv);for (i =0 ; i < n; i++) { - err =svc_set_num_threads (nn->nfsd_serv, &nn->nfsd_serv->sv_pools[i], - nthreads[i]); + err = nn->nfsd_serv->sv_ops->svo_setup (nn->nfsd_serv, + &nn->nfsd_serv->sv_pools[i], nthreads[i]);if (err)break ; }
@@ -547,7 +548,8 @@ nfsd_svc(int nrservs, struct net *net) error =nfsd_startup_net (nrservs, net);if (error) goto out_destroy; - error =svc_set_num_threads (nn->nfsd_serv,NULL , nrservs); + error = nn->nfsd_serv->sv_ops->svo_setup (nn->nfsd_serv, +NULL , nrservs);if (error) goto out_shutdown;/* We are holding a reference to nn->nfsd_serv which
include/linux/sunrpc/svc.h +3 -0
@@ -61,6 +61,9 @@ struct svc_serv_ops {/* queue up a transport for servicing */ void (*svo_enqueue_xprt)(struct svc_xprt *); +/* set up thread (or whatever) execution context */ +int (*svo_setup)(struct svc_serv *,struct svc_pool *,int ); +/* optional module to count when adding threads (pooled svcs only) */ struct module *svo_module; };