Lines Matching defs:serv
38 static void svc_unregister(const struct svc_serv *serv, struct net *net);
361 * @serv: An RPC service
370 struct svc_pool *svc_pool_for_cpu(struct svc_serv *serv)
376 if (serv->sv_nrpools <= 1)
377 return serv->sv_pools;
388 return &serv->sv_pools[pidx % serv->sv_nrpools];
391 int svc_rpcb_setup(struct svc_serv *serv, struct net *net)
400 svc_unregister(serv, net);
405 void svc_rpcb_cleanup(struct svc_serv *serv, struct net *net)
407 svc_unregister(serv, net);
412 static int svc_uses_rpcbind(struct svc_serv *serv)
417 for (progp = serv->sv_program; progp; progp = progp->pg_next) {
429 int svc_bind(struct svc_serv *serv, struct net *net)
431 if (!svc_uses_rpcbind(serv))
433 return svc_rpcb_setup(serv, net);
439 __svc_init_bc(struct svc_serv *serv)
441 INIT_LIST_HEAD(&serv->sv_cb_list);
442 spin_lock_init(&serv->sv_cb_lock);
443 init_waitqueue_head(&serv->sv_cb_waitq);
447 __svc_init_bc(struct svc_serv *serv)
459 struct svc_serv *serv;
464 if (!(serv = kzalloc(sizeof(*serv), GFP_KERNEL)))
466 serv->sv_name = prog->pg_name;
467 serv->sv_program = prog;
468 kref_init(&serv->sv_refcnt);
469 serv->sv_stats = prog->pg_stats;
472 serv->sv_max_payload = bufsize? bufsize : 4096;
473 serv->sv_max_mesg = roundup(serv->sv_max_payload + PAGE_SIZE, PAGE_SIZE);
474 serv->sv_threadfn = threadfn;
488 serv->sv_xdrsize = xdrsize;
489 INIT_LIST_HEAD(&serv->sv_tempsocks);
490 INIT_LIST_HEAD(&serv->sv_permsocks);
491 timer_setup(&serv->sv_temptimer, NULL, 0);
492 spin_lock_init(&serv->sv_lock);
494 __svc_init_bc(serv);
496 serv->sv_nrpools = npools;
497 serv->sv_pools =
498 kcalloc(serv->sv_nrpools, sizeof(struct svc_pool),
500 if (!serv->sv_pools) {
501 kfree(serv);
505 for (i = 0; i < serv->sv_nrpools; i++) {
506 struct svc_pool *pool = &serv->sv_pools[i];
509 i, serv->sv_name);
521 return serv;
551 struct svc_serv *serv;
554 serv = __svc_create(prog, bufsize, npools, threadfn);
555 if (!serv)
557 return serv;
571 struct svc_serv *serv = container_of(ref, struct svc_serv, sv_refcnt);
574 dprintk("svc: svc_destroy(%s)\n", serv->sv_program->pg_name);
575 timer_shutdown_sync(&serv->sv_temptimer);
581 BUG_ON(!list_empty(&serv->sv_permsocks));
582 BUG_ON(!list_empty(&serv->sv_tempsocks));
584 cache_clean_deferred(serv);
586 svc_pool_map_put(serv->sv_nrpools);
588 for (i = 0; i < serv->sv_nrpools; i++) {
589 struct svc_pool *pool = &serv->sv_pools[i];
595 kfree(serv->sv_pools);
596 kfree(serv);
635 svc_rqst_alloc(struct svc_serv *serv, struct svc_pool *pool, int node)
646 rqstp->rq_server = serv;
653 rqstp->rq_argp = kmalloc_node(serv->sv_xdrsize, GFP_KERNEL, node);
657 rqstp->rq_resp = kmalloc_node(serv->sv_xdrsize, GFP_KERNEL, node);
661 if (!svc_init_buffer(rqstp, serv->sv_max_mesg, node))
672 svc_prepare_thread(struct svc_serv *serv, struct svc_pool *pool, int node)
676 rqstp = svc_rqst_alloc(serv, pool, node);
680 svc_get(serv);
681 spin_lock_bh(&serv->sv_lock);
682 serv->sv_nrthreads += 1;
683 spin_unlock_bh(&serv->sv_lock);
723 svc_pool_next(struct svc_serv *serv, struct svc_pool *pool, unsigned int *state)
725 return pool ? pool : &serv->sv_pools[(*state)++ % serv->sv_nrpools];
729 svc_pool_victim(struct svc_serv *serv, struct svc_pool *pool, unsigned int *state)
737 for (i = 0; i < serv->sv_nrpools; i++) {
738 pool = &serv->sv_pools[--(*state) % serv->sv_nrpools];
761 svc_start_kthreads(struct svc_serv *serv, struct svc_pool *pool, int nrservs)
766 unsigned int state = serv->sv_nrthreads-1;
771 chosen_pool = svc_pool_next(serv, pool, &state);
774 rqstp = svc_prepare_thread(serv, chosen_pool, node);
777 task = kthread_create_on_node(serv->sv_threadfn, rqstp,
778 node, "%s", serv->sv_name);
785 if (serv->sv_nrpools > 1)
788 svc_sock_update_bufs(serv);
796 svc_stop_kthreads(struct svc_serv *serv, struct svc_pool *pool, int nrservs)
800 unsigned int state = serv->sv_nrthreads-1;
803 task = svc_pool_victim(serv, pool, &state);
817 * @serv: RPC service to adjust
819 * @nrservs: New number of threads for @serv (0 or less means kill all threads)
821 * Create or destroy threads to make the number of threads for @serv the
823 * otherwise, round-robin between all pools for @serv. @serv's
833 svc_set_num_threads(struct svc_serv *serv, struct svc_pool *pool, int nrservs)
836 nrservs -= serv->sv_nrthreads;
844 return svc_start_kthreads(serv, pool, nrservs);
846 return svc_stop_kthreads(serv, pool, nrservs);
924 struct svc_serv *serv = rqstp->rq_server;
933 spin_lock_bh(&serv->sv_lock);
934 serv->sv_nrthreads -= 1;
935 spin_unlock_bh(&serv->sv_lock);
936 svc_sock_update_bufs(serv);
940 svc_put(serv);
1116 * @serv: svc_serv struct for the service to register
1124 int svc_register(const struct svc_serv *serv, struct net *net,
1136 for (progp = serv->sv_program; progp; progp = progp->pg_next) {
1185 static void svc_unregister(const struct svc_serv *serv, struct net *net)
1194 for (progp = serv->sv_program; progp; progp = progp->pg_next) {
1298 struct svc_serv *serv = rqstp->rq_server;
1328 for (progp = serv->sv_program; progp; progp = progp->pg_next)
1382 serv->sv_stats->rpccnt++;
1434 serv->sv_stats->rpcbadfmt++;
1445 serv->sv_stats->rpcbadauth++;
1455 serv->sv_stats->rpcbadfmt++;
1463 serv->sv_stats->rpcbadfmt++;
1477 serv->sv_stats->rpcbadfmt++;
1484 serv->sv_stats->rpcbadfmt++;
1489 serv->sv_stats->rpcbadfmt++;
1552 bc_svc_process(struct svc_serv *serv, struct rpc_rqst *req,
1564 rqstp->rq_server = serv;