Lines Matching +full:pool +full:- +full:short
1 // SPDX-License-Identifier: GPL-2.0
44 unsigned short,
45 unsigned short);
53 unsigned short,
54 unsigned short);
60 * nfsd_mutex protects nn->nfsd_serv -- both the pointer itself and some members
61 * of the svc_serv struct such as ->sv_temp_socks and ->sv_permsocks.
157 nn->nfsd_versions[vers] = nfsd_support_version(vers); in nfsd_vers()
160 nn->nfsd_versions[vers] = false; in nfsd_vers()
163 return nn->nfsd_versions[vers]; in nfsd_vers()
176 if (nn->nfsd4_minorversions[i]) in nfsd_adjust_nfsd_versions4()
186 return -1; in nfsd_minorversion()
191 nn->nfsd4_minorversions[minorversion] = in nfsd_minorversion()
195 nn->nfsd4_minorversions[minorversion] = false; in nfsd_minorversion()
199 return nn->nfsd4_minorversions[minorversion]; in nfsd_minorversion()
211 return (nn && percpu_ref_tryget_live(&nn->nfsd_net_ref)); in nfsd_net_try_get()
218 percpu_ref_put(&nn->nfsd_net_ref); in nfsd_net_put()
225 complete(&nn->nfsd_net_confirm_done); in nfsd_net_done()
232 complete(&nn->nfsd_net_free_done); in nfsd_net_free()
246 if (nn->nfsd_serv) in nfsd_nrthreads()
247 rv = nn->nfsd_serv->sv_nrthreads; in nfsd_nrthreads()
257 if (!list_empty(&nn->nfsd_serv->sv_permsocks)) in nfsd_init_socks()
260 error = svc_xprt_create(nn->nfsd_serv, "udp", net, PF_INET, NFS_PORT, in nfsd_init_socks()
265 error = svc_xprt_create(nn->nfsd_serv, "tcp", net, PF_INET, NFS_PORT, in nfsd_init_socks()
294 nfsd_users--; in nfsd_startup_generic()
300 if (--nfsd_users) in nfsd_shutdown_generic()
313 * nfsd_copy_write_verifier - Atomically copy a write verifier
317 * This function provides a wait-free mechanism for copying the
325 seq = read_seqbegin(&nn->writeverf_lock); in nfsd_copy_write_verifier()
326 memcpy(verf, nn->writeverf, sizeof(nn->writeverf)); in nfsd_copy_write_verifier()
327 } while (read_seqretry(&nn->writeverf_lock, seq)); in nfsd_copy_write_verifier()
340 verf = siphash_2u64(now.tv_sec, now.tv_nsec, &nn->siphash_key); in nfsd_reset_write_verifier_locked()
341 memcpy(nn->writeverf, &verf, sizeof(nn->writeverf)); in nfsd_reset_write_verifier_locked()
345 * nfsd_reset_write_verifier - Generate a new write verifier
348 * This function updates the ->writeverf field of @nn. This field
359 write_seqlock(&nn->writeverf_lock); in nfsd_reset_write_verifier()
361 write_sequnlock(&nn->writeverf_lock); in nfsd_reset_write_verifier()
365 * Crank up a set of per-namespace resources for a new NFSD instance,
374 if (nn->nfsd_net_up) in nfsd_startup_net()
384 if (nfsd_needs_lockd(nn) && !nn->lockd_up) { in nfsd_startup_net()
388 nn->lockd_up = true; in nfsd_startup_net()
406 nn->nfsd_net_up = true; in nfsd_startup_net()
414 if (nn->lockd_up) { in nfsd_startup_net()
416 nn->lockd_up = false; in nfsd_startup_net()
427 if (!nn->nfsd_net_up) in nfsd_shutdown_net()
430 percpu_ref_kill_and_confirm(&nn->nfsd_net_ref, nfsd_net_done); in nfsd_shutdown_net()
431 wait_for_completion(&nn->nfsd_net_confirm_done); in nfsd_shutdown_net()
437 if (nn->lockd_up) { in nfsd_shutdown_net()
439 nn->lockd_up = false; in nfsd_shutdown_net()
442 wait_for_completion(&nn->nfsd_net_free_done); in nfsd_shutdown_net()
443 percpu_ref_exit(&nn->nfsd_net_ref); in nfsd_shutdown_net()
445 nn->nfsd_net_up = false; in nfsd_shutdown_net()
454 struct net_device *dev = ifa->ifa_dev->dev; in nfsd_inetaddr_event()
459 if (event != NETDEV_DOWN || !nn->nfsd_serv) in nfsd_inetaddr_event()
463 if (nn->nfsd_serv) { in nfsd_inetaddr_event()
464 dprintk("nfsd_inetaddr_event: removed %pI4\n", &ifa->ifa_local); in nfsd_inetaddr_event()
466 sin.sin_addr.s_addr = ifa->ifa_local; in nfsd_inetaddr_event()
467 svc_age_temp_xprts_now(nn->nfsd_serv, (struct sockaddr *)&sin); in nfsd_inetaddr_event()
484 struct net_device *dev = ifa->idev->dev; in nfsd_inet6addr_event()
489 if (event != NETDEV_DOWN || !nn->nfsd_serv) in nfsd_inet6addr_event()
493 if (nn->nfsd_serv) { in nfsd_inet6addr_event()
494 dprintk("nfsd_inet6addr_event: removed %pI6\n", &ifa->addr); in nfsd_inet6addr_event()
496 sin6.sin6_addr = ifa->addr; in nfsd_inet6addr_event()
498 sin6.sin6_scope_id = ifa->idev->dev->ifindex; in nfsd_inet6addr_event()
499 svc_age_temp_xprts_now(nn->nfsd_serv, (struct sockaddr *)&sin6); in nfsd_inet6addr_event()
516 * nfsd_destroy_serv - tear down NFSD's svc_serv for a namespace
522 struct svc_serv *serv = nn->nfsd_serv; in nfsd_destroy_serv()
527 nn->nfsd_serv = NULL; in nfsd_destroy_serv()
574 target = (i.totalram - i.totalhigh) << PAGE_SHIFT; in nfsd_get_default_max_blksize()
594 serv = nn->nfsd_serv; in nfsd_shutdown_threads()
620 if (nn->nfsd_serv) in nfsd_create_serv()
623 error = percpu_ref_init(&nn->nfsd_net_ref, nfsd_net_free, in nfsd_create_serv()
627 init_completion(&nn->nfsd_net_free_done); in nfsd_create_serv()
628 init_completion(&nn->nfsd_net_confirm_done); in nfsd_create_serv()
634 &nn->nfsd_svcstats, in nfsd_create_serv()
637 return -ENOMEM; in nfsd_create_serv()
645 nn->nfsd_serv = serv; in nfsd_create_serv()
663 if (nn->nfsd_serv == NULL) in nfsd_nrpools()
666 return nn->nfsd_serv->sv_nrpools; in nfsd_nrpools()
672 struct svc_serv *serv = nn->nfsd_serv; in nfsd_get_nrthreads()
676 for (i = 0; i < serv->sv_nrpools && i < n; i++) in nfsd_get_nrthreads()
677 nthreads[i] = serv->sv_pools[i].sp_nrthreads; in nfsd_get_nrthreads()
682 * nfsd_set_nrthreads - set the number of running threads in the net's service
684 * @nthreads: array of thread counts for each pool
688 * namespace in each pool. If passed an array longer then the number of pools
689 * the extra pool settings are ignored. If passed an array shorter than the
703 if (nn->nfsd_serv == NULL || n <= 0) in nfsd_set_nrthreads()
707 * Special case: When n == 1, pass in NULL for the pool, so that the in nfsd_set_nrthreads()
711 return svc_set_num_threads(nn->nfsd_serv, NULL, nthreads[0]); in nfsd_set_nrthreads()
713 if (n > nn->nfsd_serv->sv_nrpools) in nfsd_set_nrthreads()
714 n = nn->nfsd_serv->sv_nrpools; in nfsd_set_nrthreads()
726 tot -= (nthreads[i] - new); in nfsd_set_nrthreads()
730 nthreads[i]--; in nfsd_set_nrthreads()
731 tot--; in nfsd_set_nrthreads()
737 err = svc_set_num_threads(nn->nfsd_serv, in nfsd_set_nrthreads()
738 &nn->nfsd_serv->sv_pools[i], in nfsd_set_nrthreads()
745 for (i = n; i < nn->nfsd_serv->sv_nrpools; ++i) { in nfsd_set_nrthreads()
746 err = svc_set_num_threads(nn->nfsd_serv, in nfsd_set_nrthreads()
747 &nn->nfsd_serv->sv_pools[i], in nfsd_set_nrthreads()
759 * @nthreads: array of thread counts for each pool
764 * Adjust the number of threads in each pool and return the new
778 strscpy(nn->nfsd_name, scope ? scope : utsname()->nodename, in nfsd_svc()
779 sizeof(nn->nfsd_name)); in nfsd_svc()
784 serv = nn->nfsd_serv; in nfsd_svc()
792 error = serv->sv_nrthreads; in nfsd_svc()
794 if (serv->sv_nrthreads == 0) in nfsd_svc()
811 u32 version, int family, unsigned short proto, in nfsd_acl_rpcbind_set()
812 unsigned short port) in nfsd_acl_rpcbind_set()
829 if (likely(nfsd_support_acl_version(rqstp->rq_vers) && in nfsd_acl_init_request()
830 nfsd_vers(nn, rqstp->rq_vers, NFSD_TEST))) in nfsd_acl_init_request()
833 ret->mismatch.lovers = NFSD_ACL_NRVERS; in nfsd_acl_init_request()
835 if (nfsd_support_acl_version(rqstp->rq_vers) && in nfsd_acl_init_request()
837 ret->mismatch.lovers = i; in nfsd_acl_init_request()
841 if (ret->mismatch.lovers == NFSD_ACL_NRVERS) in nfsd_acl_init_request()
843 ret->mismatch.hivers = NFSD_ACL_MINVERS; in nfsd_acl_init_request()
844 for (i = NFSD_ACL_NRVERS - 1; i >= NFSD_ACL_MINVERS; i--) { in nfsd_acl_init_request()
845 if (nfsd_support_acl_version(rqstp->rq_vers) && in nfsd_acl_init_request()
847 ret->mismatch.hivers = i; in nfsd_acl_init_request()
857 u32 version, int family, unsigned short proto, in nfsd_rpcbind_set()
858 unsigned short port) in nfsd_rpcbind_set()
874 if (likely(nfsd_vers(nn, rqstp->rq_vers, NFSD_TEST))) in nfsd_init_request()
877 ret->mismatch.lovers = NFSD_MAXVERS + 1; in nfsd_init_request()
880 ret->mismatch.lovers = i; in nfsd_init_request()
884 if (ret->mismatch.lovers > NFSD_MAXVERS) in nfsd_init_request()
886 ret->mismatch.hivers = NFSD_MINVERS; in nfsd_init_request()
887 for (i = NFSD_MAXVERS; i >= NFSD_MINVERS; i--) { in nfsd_init_request()
889 ret->mismatch.hivers = i; in nfsd_init_request()
903 …struct svc_xprt *perm_sock = list_entry(rqstp->rq_server->sv_permsocks.next, typeof(struct svc_xpr… in nfsd()
904 struct net *net = perm_sock->xpt_net; in nfsd()
907 /* At this point, the thread shares current->fs in nfsd()
913 current->fs->umask = 0; in nfsd()
935 * nfsd_dispatch - Process an NFS or NFSACL or LOCALIO Request
942 * %1: Processing complete; send Reply in rqstp->rq_res
946 const struct svc_procedure *proc = rqstp->rq_procinfo; in nfsd_dispatch()
947 __be32 *statp = rqstp->rq_accept_statp; in nfsd_dispatch()
956 rqstp->rq_cachetype = proc->pc_cachetype; in nfsd_dispatch()
959 * ->pc_decode advances the argument stream past the NFS in nfsd_dispatch()
963 start = xdr_stream_pos(&rqstp->rq_arg_stream); in nfsd_dispatch()
964 len = xdr_stream_remaining(&rqstp->rq_arg_stream); in nfsd_dispatch()
965 if (!proc->pc_decode(rqstp, &rqstp->rq_arg_stream)) in nfsd_dispatch()
975 smp_store_release(&rqstp->rq_status_counter, rqstp->rq_status_counter | 1); in nfsd_dispatch()
987 nfs_reply = xdr_inline_decode(&rqstp->rq_res_stream, 0); in nfsd_dispatch()
988 *statp = proc->pc_func(rqstp); in nfsd_dispatch()
989 if (test_bit(RQ_DROPME, &rqstp->rq_flags)) in nfsd_dispatch()
992 if (!proc->pc_encode(rqstp, &rqstp->rq_res_stream)) in nfsd_dispatch()
999 smp_store_release(&rqstp->rq_status_counter, rqstp->rq_status_counter + 1); in nfsd_dispatch()
1001 nfsd_cache_update(rqstp, rp, rqstp->rq_cachetype, nfs_reply); in nfsd_dispatch()
1023 * nfssvc_decode_voidarg - Decode void arguments
1037 * nfssvc_encode_voidres - Encode void results