Lines Matching defs:serv

36 static void svc_unregister(const struct svc_serv *serv, struct net *net);
38 #define svc_serv_is_pooled(serv) ((serv)->sv_ops->svo_function)
336 svc_pool_for_cpu(struct svc_serv *serv, int cpu)
346 if (svc_serv_is_pooled(serv)) {
356 return &serv->sv_pools[pidx % serv->sv_nrpools];
359 int svc_rpcb_setup(struct svc_serv *serv, struct net *net)
368 svc_unregister(serv, net);
373 void svc_rpcb_cleanup(struct svc_serv *serv, struct net *net)
375 svc_unregister(serv, net);
380 static int svc_uses_rpcbind(struct svc_serv *serv)
385 for (progp = serv->sv_program; progp; progp = progp->pg_next) {
397 int svc_bind(struct svc_serv *serv, struct net *net)
399 if (!svc_uses_rpcbind(serv))
401 return svc_rpcb_setup(serv, net);
407 __svc_init_bc(struct svc_serv *serv)
409 INIT_LIST_HEAD(&serv->sv_cb_list);
410 spin_lock_init(&serv->sv_cb_lock);
411 init_waitqueue_head(&serv->sv_cb_waitq);
415 __svc_init_bc(struct svc_serv *serv)
427 struct svc_serv *serv;
432 if (!(serv = kzalloc(sizeof(*serv), GFP_KERNEL)))
434 serv->sv_name = prog->pg_name;
435 serv->sv_program = prog;
436 serv->sv_nrthreads = 1;
437 serv->sv_stats = prog->pg_stats;
440 serv->sv_max_payload = bufsize? bufsize : 4096;
441 serv->sv_max_mesg = roundup(serv->sv_max_payload + PAGE_SIZE, PAGE_SIZE);
442 serv->sv_ops = ops;
456 serv->sv_xdrsize = xdrsize;
457 INIT_LIST_HEAD(&serv->sv_tempsocks);
458 INIT_LIST_HEAD(&serv->sv_permsocks);
459 timer_setup(&serv->sv_temptimer, NULL, 0);
460 spin_lock_init(&serv->sv_lock);
462 __svc_init_bc(serv);
464 serv->sv_nrpools = npools;
465 serv->sv_pools =
466 kcalloc(serv->sv_nrpools, sizeof(struct svc_pool),
468 if (!serv->sv_pools) {
469 kfree(serv);
473 for (i = 0; i < serv->sv_nrpools; i++) {
474 struct svc_pool *pool = &serv->sv_pools[i];
477 i, serv->sv_name);
485 return serv;
500 struct svc_serv *serv;
503 serv = __svc_create(prog, bufsize, npools, ops);
504 if (!serv)
506 return serv;
513 void svc_shutdown_net(struct svc_serv *serv, struct net *net)
515 svc_close_net(serv, net);
517 if (serv->sv_ops->svo_shutdown)
518 serv->sv_ops->svo_shutdown(serv, net);
527 svc_destroy(struct svc_serv *serv)
530 serv->sv_program->pg_name,
531 serv->sv_nrthreads);
533 if (serv->sv_nrthreads) {
534 if (--(serv->sv_nrthreads) != 0) {
535 svc_sock_update_bufs(serv);
539 printk("svc_destroy: no threads for serv=%p!\n", serv);
541 del_timer_sync(&serv->sv_temptimer);
547 BUG_ON(!list_empty(&serv->sv_permsocks));
548 BUG_ON(!list_empty(&serv->sv_tempsocks));
550 cache_clean_deferred(serv);
552 if (svc_serv_is_pooled(serv))
555 kfree(serv->sv_pools);
556 kfree(serv);
604 svc_rqst_alloc(struct svc_serv *serv, struct svc_pool *pool, int node)
614 rqstp->rq_server = serv;
617 rqstp->rq_argp = kmalloc_node(serv->sv_xdrsize, GFP_KERNEL, node);
621 rqstp->rq_resp = kmalloc_node(serv->sv_xdrsize, GFP_KERNEL, node);
625 if (!svc_init_buffer(rqstp, serv->sv_max_mesg, node))
636 svc_prepare_thread(struct svc_serv *serv, struct svc_pool *pool, int node)
640 rqstp = svc_rqst_alloc(serv, pool, node);
644 serv->sv_nrthreads++;
657 choose_pool(struct svc_serv *serv, struct svc_pool *pool, unsigned int *state)
662 return &serv->sv_pools[(*state)++ % serv->sv_nrpools];
669 choose_victim(struct svc_serv *serv, struct svc_pool *pool, unsigned int *state)
678 for (i = 0; i < serv->sv_nrpools; i++) {
679 pool = &serv->sv_pools[--(*state) % serv->sv_nrpools];
708 svc_start_kthreads(struct svc_serv *serv, struct svc_pool *pool, int nrservs)
713 unsigned int state = serv->sv_nrthreads-1;
718 chosen_pool = choose_pool(serv, pool, &state);
721 rqstp = svc_prepare_thread(serv, chosen_pool, node);
725 __module_get(serv->sv_ops->svo_module);
726 task = kthread_create_on_node(serv->sv_ops->svo_function, rqstp,
727 node, "%s", serv->sv_name);
729 module_put(serv->sv_ops->svo_module);
735 if (serv->sv_nrpools > 1)
738 svc_sock_update_bufs(serv);
748 svc_signal_kthreads(struct svc_serv *serv, struct svc_pool *pool, int nrservs)
751 unsigned int state = serv->sv_nrthreads-1;
755 task = choose_victim(serv, pool, &state);
773 * rqstp->rq_task, which only the nfs ones do. Assumes the serv
780 svc_set_num_threads(struct svc_serv *serv, struct svc_pool *pool, int nrservs)
784 nrservs -= (serv->sv_nrthreads-1);
792 return svc_start_kthreads(serv, pool, nrservs);
794 return svc_signal_kthreads(serv, pool, nrservs);
801 svc_stop_kthreads(struct svc_serv *serv, struct svc_pool *pool, int nrservs)
805 unsigned int state = serv->sv_nrthreads-1;
809 task = choose_victim(serv, pool, &state);
822 svc_set_num_threads_sync(struct svc_serv *serv, struct svc_pool *pool, int nrservs)
826 nrservs -= (serv->sv_nrthreads-1);
834 return svc_start_kthreads(serv, pool, nrservs);
836 return svc_stop_kthreads(serv, pool, nrservs);
859 struct svc_serv *serv = rqstp->rq_server;
871 if (serv)
872 svc_destroy(serv);
1048 * @serv: svc_serv struct for the service to register
1056 int svc_register(const struct svc_serv *serv, struct net *net,
1068 for (progp = serv->sv_program; progp; progp = progp->pg_next) {
1117 static void svc_unregister(const struct svc_serv *serv, struct net *net)
1125 for (progp = serv->sv_program; progp; progp = progp->pg_next) {
1213 /* serv->sv_stats->rpcsystemerr++; */
1280 struct svc_serv *serv = rqstp->rq_server;
1318 for (progp = serv->sv_program; progp; progp = progp->pg_next)
1374 serv->sv_stats->rpccnt++;
1440 serv->sv_stats->rpcbadfmt++;
1452 serv->sv_stats->rpcbadauth++;
1462 serv->sv_stats->rpcbadfmt++;
1470 serv->sv_stats->rpcbadfmt++;
1479 serv->sv_stats->rpcbadfmt++;
1488 serv->sv_stats->rpcbadfmt++;
1501 struct svc_serv *serv = rqstp->rq_server;
1523 serv->sv_stats->rpcbadfmt++;
1543 bc_svc_process(struct svc_serv *serv, struct rpc_rqst *req,
1557 rqstp->rq_server = serv;