Lines Matching refs:serv

35 static void svc_unregister(const struct svc_serv *serv, struct net *net);
37 #define svc_serv_is_pooled(serv) ((serv)->sv_ops->svo_function) argument
335 svc_pool_for_cpu(struct svc_serv *serv, int cpu) in svc_pool_for_cpu() argument
345 if (svc_serv_is_pooled(serv)) { in svc_pool_for_cpu()
355 return &serv->sv_pools[pidx % serv->sv_nrpools]; in svc_pool_for_cpu()
358 int svc_rpcb_setup(struct svc_serv *serv, struct net *net) in svc_rpcb_setup() argument
367 svc_unregister(serv, net); in svc_rpcb_setup()
372 void svc_rpcb_cleanup(struct svc_serv *serv, struct net *net) in svc_rpcb_cleanup() argument
374 svc_unregister(serv, net); in svc_rpcb_cleanup()
379 static int svc_uses_rpcbind(struct svc_serv *serv) in svc_uses_rpcbind() argument
384 for (progp = serv->sv_program; progp; progp = progp->pg_next) { in svc_uses_rpcbind()
396 int svc_bind(struct svc_serv *serv, struct net *net) in svc_bind() argument
398 if (!svc_uses_rpcbind(serv)) in svc_bind()
400 return svc_rpcb_setup(serv, net); in svc_bind()
411 struct svc_serv *serv; in __svc_create() local
416 if (!(serv = kzalloc(sizeof(*serv), GFP_KERNEL))) in __svc_create()
418 serv->sv_name = prog->pg_name; in __svc_create()
419 serv->sv_program = prog; in __svc_create()
420 serv->sv_nrthreads = 1; in __svc_create()
421 serv->sv_stats = prog->pg_stats; in __svc_create()
424 serv->sv_max_payload = bufsize? bufsize : 4096; in __svc_create()
425 serv->sv_max_mesg = roundup(serv->sv_max_payload + PAGE_SIZE, PAGE_SIZE); in __svc_create()
426 serv->sv_ops = ops; in __svc_create()
440 serv->sv_xdrsize = xdrsize; in __svc_create()
441 INIT_LIST_HEAD(&serv->sv_tempsocks); in __svc_create()
442 INIT_LIST_HEAD(&serv->sv_permsocks); in __svc_create()
443 init_timer(&serv->sv_temptimer); in __svc_create()
444 spin_lock_init(&serv->sv_lock); in __svc_create()
446 serv->sv_nrpools = npools; in __svc_create()
447 serv->sv_pools = in __svc_create()
448 kcalloc(serv->sv_nrpools, sizeof(struct svc_pool), in __svc_create()
450 if (!serv->sv_pools) { in __svc_create()
451 kfree(serv); in __svc_create()
455 for (i = 0; i < serv->sv_nrpools; i++) { in __svc_create()
456 struct svc_pool *pool = &serv->sv_pools[i]; in __svc_create()
459 i, serv->sv_name); in __svc_create()
467 return serv; in __svc_create()
482 struct svc_serv *serv; in svc_create_pooled() local
485 serv = __svc_create(prog, bufsize, npools, ops); in svc_create_pooled()
486 if (!serv) in svc_create_pooled()
488 return serv; in svc_create_pooled()
495 void svc_shutdown_net(struct svc_serv *serv, struct net *net) in svc_shutdown_net() argument
497 svc_close_net(serv, net); in svc_shutdown_net()
499 if (serv->sv_ops->svo_shutdown) in svc_shutdown_net()
500 serv->sv_ops->svo_shutdown(serv, net); in svc_shutdown_net()
509 svc_destroy(struct svc_serv *serv) in svc_destroy() argument
512 serv->sv_program->pg_name, in svc_destroy()
513 serv->sv_nrthreads); in svc_destroy()
515 if (serv->sv_nrthreads) { in svc_destroy()
516 if (--(serv->sv_nrthreads) != 0) { in svc_destroy()
517 svc_sock_update_bufs(serv); in svc_destroy()
521 printk("svc_destroy: no threads for serv=%p!\n", serv); in svc_destroy()
523 del_timer_sync(&serv->sv_temptimer); in svc_destroy()
529 BUG_ON(!list_empty(&serv->sv_permsocks)); in svc_destroy()
530 BUG_ON(!list_empty(&serv->sv_tempsocks)); in svc_destroy()
532 cache_clean_deferred(serv); in svc_destroy()
534 if (svc_serv_is_pooled(serv)) in svc_destroy()
537 kfree(serv->sv_pools); in svc_destroy()
538 kfree(serv); in svc_destroy()
586 svc_rqst_alloc(struct svc_serv *serv, struct svc_pool *pool, int node) in svc_rqst_alloc() argument
596 rqstp->rq_server = serv; in svc_rqst_alloc()
599 rqstp->rq_argp = kmalloc_node(serv->sv_xdrsize, GFP_KERNEL, node); in svc_rqst_alloc()
603 rqstp->rq_resp = kmalloc_node(serv->sv_xdrsize, GFP_KERNEL, node); in svc_rqst_alloc()
607 if (!svc_init_buffer(rqstp, serv->sv_max_mesg, node)) in svc_rqst_alloc()
618 svc_prepare_thread(struct svc_serv *serv, struct svc_pool *pool, int node) in svc_prepare_thread() argument
622 rqstp = svc_rqst_alloc(serv, pool, node); in svc_prepare_thread()
626 serv->sv_nrthreads++; in svc_prepare_thread()
639 choose_pool(struct svc_serv *serv, struct svc_pool *pool, unsigned int *state) in choose_pool() argument
644 return &serv->sv_pools[(*state)++ % serv->sv_nrpools]; in choose_pool()
651 choose_victim(struct svc_serv *serv, struct svc_pool *pool, unsigned int *state) in choose_victim() argument
660 for (i = 0; i < serv->sv_nrpools; i++) { in choose_victim()
661 pool = &serv->sv_pools[--(*state) % serv->sv_nrpools]; in choose_victim()
703 svc_set_num_threads(struct svc_serv *serv, struct svc_pool *pool, int nrservs) in svc_set_num_threads() argument
709 unsigned int state = serv->sv_nrthreads-1; in svc_set_num_threads()
714 nrservs -= (serv->sv_nrthreads-1); in svc_set_num_threads()
724 chosen_pool = choose_pool(serv, pool, &state); in svc_set_num_threads()
727 rqstp = svc_prepare_thread(serv, chosen_pool, node); in svc_set_num_threads()
733 __module_get(serv->sv_ops->svo_module); in svc_set_num_threads()
734 task = kthread_create_on_node(serv->sv_ops->svo_function, rqstp, in svc_set_num_threads()
735 node, "%s", serv->sv_name); in svc_set_num_threads()
738 module_put(serv->sv_ops->svo_module); in svc_set_num_threads()
744 if (serv->sv_nrpools > 1) in svc_set_num_threads()
747 svc_sock_update_bufs(serv); in svc_set_num_threads()
752 (task = choose_victim(serv, pool, &state)) != NULL) { in svc_set_num_threads()
779 struct svc_serv *serv = rqstp->rq_server; in svc_exit_thread() local
791 if (serv) in svc_exit_thread()
792 svc_destroy(serv); in svc_exit_thread()
931 int svc_register(const struct svc_serv *serv, struct net *net, in svc_register() argument
944 for (progp = serv->sv_program; progp; progp = progp->pg_next) { in svc_register()
1015 static void svc_unregister(const struct svc_serv *serv, struct net *net) in svc_unregister() argument
1023 for (progp = serv->sv_program; progp; progp = progp->pg_next) { in svc_unregister()
1074 struct svc_serv *serv = rqstp->rq_server; in svc_process_common() local
1115 for (progp = serv->sv_program; progp; progp = progp->pg_next) in svc_process_common()
1162 serv->sv_stats->rpccnt++; in svc_process_common()
1241 serv->sv_stats->rpcbadfmt++; in svc_process_common()
1250 serv->sv_stats->rpcbadauth++; in svc_process_common()
1260 serv->sv_stats->rpcbadfmt++; in svc_process_common()
1268 serv->sv_stats->rpcbadfmt++; in svc_process_common()
1277 serv->sv_stats->rpcbadfmt++; in svc_process_common()
1286 serv->sv_stats->rpcbadfmt++; in svc_process_common()
1299 struct svc_serv *serv = rqstp->rq_server; in svc_process() local
1321 serv->sv_stats->rpcbadfmt++; in svc_process()
1345 bc_svc_process(struct svc_serv *serv, struct rpc_rqst *req, in bc_svc_process() argument
1357 rqstp->rq_xprt = serv->sv_bc_xprt; in bc_svc_process()
1360 rqstp->rq_server = serv; in bc_svc_process()