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_function) argument
352 svc_pool_for_cpu(struct svc_serv *serv, int cpu) in svc_pool_for_cpu() argument
362 if (svc_serv_is_pooled(serv)) { in svc_pool_for_cpu()
372 return &serv->sv_pools[pidx % serv->sv_nrpools]; in svc_pool_for_cpu()
375 int svc_rpcb_setup(struct svc_serv *serv, struct net *net) in svc_rpcb_setup() argument
384 svc_unregister(serv, net); in svc_rpcb_setup()
389 void svc_rpcb_cleanup(struct svc_serv *serv, struct net *net) in svc_rpcb_cleanup() argument
391 svc_unregister(serv, net); in svc_rpcb_cleanup()
396 static int svc_uses_rpcbind(struct svc_serv *serv) in svc_uses_rpcbind() argument
401 for (progp = serv->sv_program; progp; progp = progp->pg_next) { in svc_uses_rpcbind()
413 int svc_bind(struct svc_serv *serv, struct net *net) in svc_bind() argument
415 if (!svc_uses_rpcbind(serv)) in svc_bind()
417 return svc_rpcb_setup(serv, net); in svc_bind()
426 void (*shutdown)(struct svc_serv *serv, struct net *net)) in __svc_create() argument
428 struct svc_serv *serv; in __svc_create() local
433 if (!(serv = kzalloc(sizeof(*serv), GFP_KERNEL))) in __svc_create()
435 serv->sv_name = prog->pg_name; in __svc_create()
436 serv->sv_program = prog; in __svc_create()
437 serv->sv_nrthreads = 1; in __svc_create()
438 serv->sv_stats = prog->pg_stats; in __svc_create()
441 serv->sv_max_payload = bufsize? bufsize : 4096; in __svc_create()
442 serv->sv_max_mesg = roundup(serv->sv_max_payload + PAGE_SIZE, PAGE_SIZE); in __svc_create()
443 serv->sv_shutdown = shutdown; in __svc_create()
457 serv->sv_xdrsize = xdrsize; in __svc_create()
458 INIT_LIST_HEAD(&serv->sv_tempsocks); in __svc_create()
459 INIT_LIST_HEAD(&serv->sv_permsocks); in __svc_create()
460 init_timer(&serv->sv_temptimer); in __svc_create()
461 spin_lock_init(&serv->sv_lock); in __svc_create()
463 serv->sv_nrpools = npools; in __svc_create()
464 serv->sv_pools = in __svc_create()
465 kcalloc(serv->sv_nrpools, sizeof(struct svc_pool), in __svc_create()
467 if (!serv->sv_pools) { in __svc_create()
468 kfree(serv); in __svc_create()
472 for (i = 0; i < serv->sv_nrpools; i++) { in __svc_create()
473 struct svc_pool *pool = &serv->sv_pools[i]; in __svc_create()
476 i, serv->sv_name); in __svc_create()
484 return serv; in __svc_create()
489 void (*shutdown)(struct svc_serv *serv, struct net *net)) in svc_create() argument
497 void (*shutdown)(struct svc_serv *serv, struct net *net), in svc_create_pooled() argument
500 struct svc_serv *serv; in svc_create_pooled() local
503 serv = __svc_create(prog, bufsize, npools, shutdown); in svc_create_pooled()
504 if (!serv) in svc_create_pooled()
507 serv->sv_function = func; in svc_create_pooled()
508 serv->sv_module = mod; in svc_create_pooled()
509 return serv; in svc_create_pooled()
516 void svc_shutdown_net(struct svc_serv *serv, struct net *net) in svc_shutdown_net() argument
518 svc_close_net(serv, net); in svc_shutdown_net()
520 if (serv->sv_shutdown) in svc_shutdown_net()
521 serv->sv_shutdown(serv, net); in svc_shutdown_net()
530 svc_destroy(struct svc_serv *serv) in svc_destroy() argument
533 serv->sv_program->pg_name, in svc_destroy()
534 serv->sv_nrthreads); in svc_destroy()
536 if (serv->sv_nrthreads) { in svc_destroy()
537 if (--(serv->sv_nrthreads) != 0) { in svc_destroy()
538 svc_sock_update_bufs(serv); in svc_destroy()
542 printk("svc_destroy: no threads for serv=%p!\n", serv); in svc_destroy()
544 del_timer_sync(&serv->sv_temptimer); in svc_destroy()
550 BUG_ON(!list_empty(&serv->sv_permsocks)); in svc_destroy()
551 BUG_ON(!list_empty(&serv->sv_tempsocks)); in svc_destroy()
553 cache_clean_deferred(serv); in svc_destroy()
555 if (svc_serv_is_pooled(serv)) in svc_destroy()
558 kfree(serv->sv_pools); in svc_destroy()
559 kfree(serv); in svc_destroy()
607 svc_prepare_thread(struct svc_serv *serv, struct svc_pool *pool, int node) in svc_prepare_thread() argument
615 serv->sv_nrthreads++; in svc_prepare_thread()
618 rqstp->rq_server = serv; in svc_prepare_thread()
625 rqstp->rq_argp = kmalloc_node(serv->sv_xdrsize, GFP_KERNEL, node); in svc_prepare_thread()
629 rqstp->rq_resp = kmalloc_node(serv->sv_xdrsize, GFP_KERNEL, node); in svc_prepare_thread()
633 if (!svc_init_buffer(rqstp, serv->sv_max_mesg, node)) in svc_prepare_thread()
648 choose_pool(struct svc_serv *serv, struct svc_pool *pool, unsigned int *state) in choose_pool() argument
653 return &serv->sv_pools[(*state)++ % serv->sv_nrpools]; in choose_pool()
660 choose_victim(struct svc_serv *serv, struct svc_pool *pool, unsigned int *state) in choose_victim() argument
669 for (i = 0; i < serv->sv_nrpools; i++) { in choose_victim()
670 pool = &serv->sv_pools[--(*state) % serv->sv_nrpools]; in choose_victim()
712 svc_set_num_threads(struct svc_serv *serv, struct svc_pool *pool, int nrservs) in svc_set_num_threads() argument
718 unsigned int state = serv->sv_nrthreads-1; in svc_set_num_threads()
723 nrservs -= (serv->sv_nrthreads-1); in svc_set_num_threads()
733 chosen_pool = choose_pool(serv, pool, &state); in svc_set_num_threads()
736 rqstp = svc_prepare_thread(serv, chosen_pool, node); in svc_set_num_threads()
742 __module_get(serv->sv_module); in svc_set_num_threads()
743 task = kthread_create_on_node(serv->sv_function, rqstp, in svc_set_num_threads()
744 node, "%s", serv->sv_name); in svc_set_num_threads()
747 module_put(serv->sv_module); in svc_set_num_threads()
753 if (serv->sv_nrpools > 1) in svc_set_num_threads()
756 svc_sock_update_bufs(serv); in svc_set_num_threads()
761 (task = choose_victim(serv, pool, &state)) != NULL) { in svc_set_num_threads()
777 struct svc_serv *serv = rqstp->rq_server; in svc_exit_thread() local
794 if (serv) in svc_exit_thread()
795 svc_destroy(serv); in svc_exit_thread()
934 int svc_register(const struct svc_serv *serv, struct net *net, in svc_register() argument
947 for (progp = serv->sv_program; progp; progp = progp->pg_next) { in svc_register()
1018 static void svc_unregister(const struct svc_serv *serv, struct net *net) in svc_unregister() argument
1026 for (progp = serv->sv_program; progp; progp = progp->pg_next) { in svc_unregister()
1077 struct svc_serv *serv = rqstp->rq_server; in svc_process_common() local
1118 for (progp = serv->sv_program; progp; progp = progp->pg_next) in svc_process_common()
1165 serv->sv_stats->rpccnt++; in svc_process_common()
1244 serv->sv_stats->rpcbadfmt++; in svc_process_common()
1253 serv->sv_stats->rpcbadauth++; in svc_process_common()
1263 serv->sv_stats->rpcbadfmt++; in svc_process_common()
1271 serv->sv_stats->rpcbadfmt++; in svc_process_common()
1280 serv->sv_stats->rpcbadfmt++; in svc_process_common()
1289 serv->sv_stats->rpcbadfmt++; in svc_process_common()
1303 struct svc_serv *serv = rqstp->rq_server; in svc_process() local
1325 serv->sv_stats->rpcbadfmt++; in svc_process()
1348 bc_svc_process(struct svc_serv *serv, struct rpc_rqst *req, in bc_svc_process() argument
1355 rqstp->rq_xprt = serv->sv_bc_xprt; in bc_svc_process()
1358 rqstp->rq_server = serv; in bc_svc_process()