mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 12:43:29 +02:00
NFSD: Move svc_serv_ops::svo_function into struct svc_serv
Hoist svo_function back into svc_serv and remove struct svc_serv_ops, since the struct is now devoid of fields. Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
This commit is contained in:
@@ -349,10 +349,6 @@ static struct notifier_block lockd_inet6addr_notifier = {
|
|||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static const struct svc_serv_ops lockd_sv_ops = {
|
|
||||||
.svo_function = lockd,
|
|
||||||
};
|
|
||||||
|
|
||||||
static int lockd_get(void)
|
static int lockd_get(void)
|
||||||
{
|
{
|
||||||
struct svc_serv *serv;
|
struct svc_serv *serv;
|
||||||
@@ -376,7 +372,7 @@ static int lockd_get(void)
|
|||||||
nlm_timeout = LOCKD_DFLT_TIMEO;
|
nlm_timeout = LOCKD_DFLT_TIMEO;
|
||||||
nlmsvc_timeout = nlm_timeout * HZ;
|
nlmsvc_timeout = nlm_timeout * HZ;
|
||||||
|
|
||||||
serv = svc_create(&nlmsvc_program, LOCKD_BUFSIZE, &lockd_sv_ops);
|
serv = svc_create(&nlmsvc_program, LOCKD_BUFSIZE, lockd);
|
||||||
if (!serv) {
|
if (!serv) {
|
||||||
printk(KERN_WARNING "lockd_up: create service failed\n");
|
printk(KERN_WARNING "lockd_up: create service failed\n");
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
@@ -231,29 +231,10 @@ err_bind:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct svc_serv_ops nfs40_cb_sv_ops = {
|
|
||||||
.svo_function = nfs4_callback_svc,
|
|
||||||
};
|
|
||||||
#if defined(CONFIG_NFS_V4_1)
|
|
||||||
static const struct svc_serv_ops nfs41_cb_sv_ops = {
|
|
||||||
.svo_function = nfs41_callback_svc,
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct svc_serv_ops *nfs4_cb_sv_ops[] = {
|
|
||||||
[0] = &nfs40_cb_sv_ops,
|
|
||||||
[1] = &nfs41_cb_sv_ops,
|
|
||||||
};
|
|
||||||
#else
|
|
||||||
static const struct svc_serv_ops *nfs4_cb_sv_ops[] = {
|
|
||||||
[0] = &nfs40_cb_sv_ops,
|
|
||||||
[1] = NULL,
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static struct svc_serv *nfs_callback_create_svc(int minorversion)
|
static struct svc_serv *nfs_callback_create_svc(int minorversion)
|
||||||
{
|
{
|
||||||
struct nfs_callback_data *cb_info = &nfs_callback_info[minorversion];
|
struct nfs_callback_data *cb_info = &nfs_callback_info[minorversion];
|
||||||
const struct svc_serv_ops *sv_ops;
|
int (*threadfn)(void *data);
|
||||||
struct svc_serv *serv;
|
struct svc_serv *serv;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -262,17 +243,6 @@ static struct svc_serv *nfs_callback_create_svc(int minorversion)
|
|||||||
if (cb_info->serv)
|
if (cb_info->serv)
|
||||||
return svc_get(cb_info->serv);
|
return svc_get(cb_info->serv);
|
||||||
|
|
||||||
switch (minorversion) {
|
|
||||||
case 0:
|
|
||||||
sv_ops = nfs4_cb_sv_ops[0];
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
sv_ops = nfs4_cb_sv_ops[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sv_ops == NULL)
|
|
||||||
return ERR_PTR(-ENOTSUPP);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Sanity check: if there's no task,
|
* Sanity check: if there's no task,
|
||||||
* we should be the first user ...
|
* we should be the first user ...
|
||||||
@@ -281,7 +251,16 @@ static struct svc_serv *nfs_callback_create_svc(int minorversion)
|
|||||||
printk(KERN_WARNING "nfs_callback_create_svc: no kthread, %d users??\n",
|
printk(KERN_WARNING "nfs_callback_create_svc: no kthread, %d users??\n",
|
||||||
cb_info->users);
|
cb_info->users);
|
||||||
|
|
||||||
serv = svc_create(&nfs4_callback_program, NFS4_CALLBACK_BUFSIZE, sv_ops);
|
threadfn = nfs4_callback_svc;
|
||||||
|
#if defined(CONFIG_NFS_V4_1)
|
||||||
|
if (minorversion)
|
||||||
|
threadfn = nfs41_callback_svc;
|
||||||
|
#else
|
||||||
|
if (minorversion)
|
||||||
|
return ERR_PTR(-ENOTSUPP);
|
||||||
|
#endif
|
||||||
|
serv = svc_create(&nfs4_callback_program, NFS4_CALLBACK_BUFSIZE,
|
||||||
|
threadfn);
|
||||||
if (!serv) {
|
if (!serv) {
|
||||||
printk(KERN_ERR "nfs_callback_create_svc: create service failed\n");
|
printk(KERN_ERR "nfs_callback_create_svc: create service failed\n");
|
||||||
return ERR_PTR(-ENOMEM);
|
return ERR_PTR(-ENOMEM);
|
||||||
|
@@ -612,10 +612,6 @@ static int nfsd_get_default_max_blksize(void)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct svc_serv_ops nfsd_thread_sv_ops = {
|
|
||||||
.svo_function = nfsd,
|
|
||||||
};
|
|
||||||
|
|
||||||
void nfsd_shutdown_threads(struct net *net)
|
void nfsd_shutdown_threads(struct net *net)
|
||||||
{
|
{
|
||||||
struct nfsd_net *nn = net_generic(net, nfsd_net_id);
|
struct nfsd_net *nn = net_generic(net, nfsd_net_id);
|
||||||
@@ -654,8 +650,7 @@ int nfsd_create_serv(struct net *net)
|
|||||||
if (nfsd_max_blksize == 0)
|
if (nfsd_max_blksize == 0)
|
||||||
nfsd_max_blksize = nfsd_get_default_max_blksize();
|
nfsd_max_blksize = nfsd_get_default_max_blksize();
|
||||||
nfsd_reset_versions(nn);
|
nfsd_reset_versions(nn);
|
||||||
serv = svc_create_pooled(&nfsd_program, nfsd_max_blksize,
|
serv = svc_create_pooled(&nfsd_program, nfsd_max_blksize, nfsd);
|
||||||
&nfsd_thread_sv_ops);
|
|
||||||
if (serv == NULL)
|
if (serv == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
@@ -52,13 +52,6 @@ struct svc_pool {
|
|||||||
unsigned long sp_flags;
|
unsigned long sp_flags;
|
||||||
} ____cacheline_aligned_in_smp;
|
} ____cacheline_aligned_in_smp;
|
||||||
|
|
||||||
struct svc_serv;
|
|
||||||
|
|
||||||
struct svc_serv_ops {
|
|
||||||
/* function for service threads to run */
|
|
||||||
int (*svo_function)(void *);
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* RPC service.
|
* RPC service.
|
||||||
*
|
*
|
||||||
@@ -91,7 +84,8 @@ struct svc_serv {
|
|||||||
|
|
||||||
unsigned int sv_nrpools; /* number of thread pools */
|
unsigned int sv_nrpools; /* number of thread pools */
|
||||||
struct svc_pool * sv_pools; /* array of thread pools */
|
struct svc_pool * sv_pools; /* array of thread pools */
|
||||||
const struct svc_serv_ops *sv_ops; /* server operations */
|
int (*sv_threadfn)(void *data);
|
||||||
|
|
||||||
#if defined(CONFIG_SUNRPC_BACKCHANNEL)
|
#if defined(CONFIG_SUNRPC_BACKCHANNEL)
|
||||||
struct list_head sv_cb_list; /* queue for callback requests
|
struct list_head sv_cb_list; /* queue for callback requests
|
||||||
* that arrive over the same
|
* that arrive over the same
|
||||||
@@ -492,7 +486,7 @@ int svc_rpcb_setup(struct svc_serv *serv, struct net *net);
|
|||||||
void svc_rpcb_cleanup(struct svc_serv *serv, struct net *net);
|
void svc_rpcb_cleanup(struct svc_serv *serv, struct net *net);
|
||||||
int svc_bind(struct svc_serv *serv, struct net *net);
|
int svc_bind(struct svc_serv *serv, struct net *net);
|
||||||
struct svc_serv *svc_create(struct svc_program *, unsigned int,
|
struct svc_serv *svc_create(struct svc_program *, unsigned int,
|
||||||
const struct svc_serv_ops *);
|
int (*threadfn)(void *data));
|
||||||
struct svc_rqst *svc_rqst_alloc(struct svc_serv *serv,
|
struct svc_rqst *svc_rqst_alloc(struct svc_serv *serv,
|
||||||
struct svc_pool *pool, int node);
|
struct svc_pool *pool, int node);
|
||||||
void svc_rqst_replace_page(struct svc_rqst *rqstp,
|
void svc_rqst_replace_page(struct svc_rqst *rqstp,
|
||||||
@@ -500,7 +494,7 @@ void svc_rqst_replace_page(struct svc_rqst *rqstp,
|
|||||||
void svc_rqst_free(struct svc_rqst *);
|
void svc_rqst_free(struct svc_rqst *);
|
||||||
void svc_exit_thread(struct svc_rqst *);
|
void svc_exit_thread(struct svc_rqst *);
|
||||||
struct svc_serv * svc_create_pooled(struct svc_program *, unsigned int,
|
struct svc_serv * svc_create_pooled(struct svc_program *, unsigned int,
|
||||||
const struct svc_serv_ops *);
|
int (*threadfn)(void *data));
|
||||||
int svc_set_num_threads(struct svc_serv *, struct svc_pool *, int);
|
int svc_set_num_threads(struct svc_serv *, struct svc_pool *, int);
|
||||||
int svc_pool_stats_open(struct svc_serv *serv, struct file *file);
|
int svc_pool_stats_open(struct svc_serv *serv, struct file *file);
|
||||||
int svc_process(struct svc_rqst *);
|
int svc_process(struct svc_rqst *);
|
||||||
|
@@ -448,7 +448,7 @@ __svc_init_bc(struct svc_serv *serv)
|
|||||||
*/
|
*/
|
||||||
static struct svc_serv *
|
static struct svc_serv *
|
||||||
__svc_create(struct svc_program *prog, unsigned int bufsize, int npools,
|
__svc_create(struct svc_program *prog, unsigned int bufsize, int npools,
|
||||||
const struct svc_serv_ops *ops)
|
int (*threadfn)(void *data))
|
||||||
{
|
{
|
||||||
struct svc_serv *serv;
|
struct svc_serv *serv;
|
||||||
unsigned int vers;
|
unsigned int vers;
|
||||||
@@ -465,7 +465,7 @@ __svc_create(struct svc_program *prog, unsigned int bufsize, int npools,
|
|||||||
bufsize = RPCSVC_MAXPAYLOAD;
|
bufsize = RPCSVC_MAXPAYLOAD;
|
||||||
serv->sv_max_payload = bufsize? bufsize : 4096;
|
serv->sv_max_payload = bufsize? bufsize : 4096;
|
||||||
serv->sv_max_mesg = roundup(serv->sv_max_payload + PAGE_SIZE, PAGE_SIZE);
|
serv->sv_max_mesg = roundup(serv->sv_max_payload + PAGE_SIZE, PAGE_SIZE);
|
||||||
serv->sv_ops = ops;
|
serv->sv_threadfn = threadfn;
|
||||||
xdrsize = 0;
|
xdrsize = 0;
|
||||||
while (prog) {
|
while (prog) {
|
||||||
prog->pg_lovers = prog->pg_nvers-1;
|
prog->pg_lovers = prog->pg_nvers-1;
|
||||||
@@ -511,22 +511,37 @@ __svc_create(struct svc_program *prog, unsigned int bufsize, int npools,
|
|||||||
return serv;
|
return serv;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct svc_serv *
|
/**
|
||||||
svc_create(struct svc_program *prog, unsigned int bufsize,
|
* svc_create - Create an RPC service
|
||||||
const struct svc_serv_ops *ops)
|
* @prog: the RPC program the new service will handle
|
||||||
|
* @bufsize: maximum message size for @prog
|
||||||
|
* @threadfn: a function to service RPC requests for @prog
|
||||||
|
*
|
||||||
|
* Returns an instantiated struct svc_serv object or NULL.
|
||||||
|
*/
|
||||||
|
struct svc_serv *svc_create(struct svc_program *prog, unsigned int bufsize,
|
||||||
|
int (*threadfn)(void *data))
|
||||||
{
|
{
|
||||||
return __svc_create(prog, bufsize, /*npools*/1, ops);
|
return __svc_create(prog, bufsize, 1, threadfn);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(svc_create);
|
EXPORT_SYMBOL_GPL(svc_create);
|
||||||
|
|
||||||
struct svc_serv *
|
/**
|
||||||
svc_create_pooled(struct svc_program *prog, unsigned int bufsize,
|
* svc_create_pooled - Create an RPC service with pooled threads
|
||||||
const struct svc_serv_ops *ops)
|
* @prog: the RPC program the new service will handle
|
||||||
|
* @bufsize: maximum message size for @prog
|
||||||
|
* @threadfn: a function to service RPC requests for @prog
|
||||||
|
*
|
||||||
|
* Returns an instantiated struct svc_serv object or NULL.
|
||||||
|
*/
|
||||||
|
struct svc_serv *svc_create_pooled(struct svc_program *prog,
|
||||||
|
unsigned int bufsize,
|
||||||
|
int (*threadfn)(void *data))
|
||||||
{
|
{
|
||||||
struct svc_serv *serv;
|
struct svc_serv *serv;
|
||||||
unsigned int npools = svc_pool_map_get();
|
unsigned int npools = svc_pool_map_get();
|
||||||
|
|
||||||
serv = __svc_create(prog, bufsize, npools, ops);
|
serv = __svc_create(prog, bufsize, npools, threadfn);
|
||||||
if (!serv)
|
if (!serv)
|
||||||
goto out_err;
|
goto out_err;
|
||||||
return serv;
|
return serv;
|
||||||
@@ -736,7 +751,7 @@ svc_start_kthreads(struct svc_serv *serv, struct svc_pool *pool, int nrservs)
|
|||||||
if (IS_ERR(rqstp))
|
if (IS_ERR(rqstp))
|
||||||
return PTR_ERR(rqstp);
|
return PTR_ERR(rqstp);
|
||||||
|
|
||||||
task = kthread_create_on_node(serv->sv_ops->svo_function, rqstp,
|
task = kthread_create_on_node(serv->sv_threadfn, rqstp,
|
||||||
node, "%s", serv->sv_name);
|
node, "%s", serv->sv_name);
|
||||||
if (IS_ERR(task)) {
|
if (IS_ERR(task)) {
|
||||||
svc_exit_thread(rqstp);
|
svc_exit_thread(rqstp);
|
||||||
|
Reference in New Issue
Block a user