Lines Matching refs:nn

59  * nfsd_mutex protects nn->nfsd_serv -- both the pointer itself and some members
62 * If (out side the lock) nn->nfsd_serv is non-NULL, then it must point to a
64 * nn->keep_active is set). That number of nfsd threads must
68 * Each active thread holds a counted reference on nn->nfsd_serv, as does
69 * the nn->keep_active flag and various transient calls to svc_get().
188 nfsd_netns_free_versions(struct nfsd_net *nn)
190 kfree(nn->nfsd_versions);
191 kfree(nn->nfsd4_minorversions);
192 nn->nfsd_versions = NULL;
193 nn->nfsd4_minorversions = NULL;
197 nfsd_netns_init_versions(struct nfsd_net *nn)
199 if (!nn->nfsd_versions) {
200 nn->nfsd_versions = nfsd_alloc_versions();
201 nn->nfsd4_minorversions = nfsd_alloc_minorversions();
202 if (!nn->nfsd_versions || !nn->nfsd4_minorversions)
203 nfsd_netns_free_versions(nn);
207 int nfsd_vers(struct nfsd_net *nn, int vers, enum vers_op change)
213 if (nn->nfsd_versions)
214 nn->nfsd_versions[vers] = nfsd_support_version(vers);
217 nfsd_netns_init_versions(nn);
218 if (nn->nfsd_versions)
219 nn->nfsd_versions[vers] = false;
222 if (nn->nfsd_versions)
223 return nn->nfsd_versions[vers];
232 nfsd_adjust_nfsd_versions4(struct nfsd_net *nn)
237 if (nn->nfsd4_minorversions[i])
240 nfsd_vers(nn, 4, NFSD_CLEAR);
243 int nfsd_minorversion(struct nfsd_net *nn, u32 minorversion, enum vers_op change)
251 if (nn->nfsd4_minorversions) {
252 nfsd_vers(nn, 4, NFSD_SET);
253 nn->nfsd4_minorversions[minorversion] =
254 nfsd_vers(nn, 4, NFSD_TEST);
258 nfsd_netns_init_versions(nn);
259 if (nn->nfsd4_minorversions) {
260 nn->nfsd4_minorversions[minorversion] = false;
261 nfsd_adjust_nfsd_versions4(nn);
265 if (nn->nfsd4_minorversions)
266 return nn->nfsd4_minorversions[minorversion];
267 return nfsd_vers(nn, 4, NFSD_TEST);
270 nfsd_vers(nn, 4, NFSD_AVAIL);
283 struct nfsd_net *nn = net_generic(net, nfsd_net_id);
286 if (nn->nfsd_serv)
287 rv = nn->nfsd_serv->sv_nrthreads;
295 struct nfsd_net *nn = net_generic(net, nfsd_net_id);
297 if (!list_empty(&nn->nfsd_serv->sv_permsocks))
300 error = svc_xprt_create(nn->nfsd_serv, "udp", net, PF_INET, NFS_PORT,
305 error = svc_xprt_create(nn->nfsd_serv, "tcp", net, PF_INET, NFS_PORT,
347 static bool nfsd_needs_lockd(struct nfsd_net *nn)
349 return nfsd_vers(nn, 2, NFSD_TEST) || nfsd_vers(nn, 3, NFSD_TEST);
355 * @nn: NFS net namespace
360 void nfsd_copy_write_verifier(__be32 verf[2], struct nfsd_net *nn)
365 read_seqbegin_or_lock(&nn->writeverf_lock, &seq);
366 memcpy(verf, nn->writeverf, sizeof(nn->writeverf));
367 } while (need_seqretry(&nn->writeverf_lock, seq));
368 done_seqretry(&nn->writeverf_lock, seq);
371 static void nfsd_reset_write_verifier_locked(struct nfsd_net *nn)
381 verf = siphash_2u64(now.tv_sec, now.tv_nsec, &nn->siphash_key);
382 memcpy(nn->writeverf, &verf, sizeof(nn->writeverf));
387 * @nn: NFS net namespace
389 * This function updates the ->writeverf field of @nn. This field
398 void nfsd_reset_write_verifier(struct nfsd_net *nn)
400 write_seqlock(&nn->writeverf_lock);
401 nfsd_reset_write_verifier_locked(nn);
402 write_sequnlock(&nn->writeverf_lock);
412 struct nfsd_net *nn = net_generic(net, nfsd_net_id);
415 if (nn->nfsd_net_up)
425 if (nfsd_needs_lockd(nn) && !nn->lockd_up) {
429 nn->lockd_up = true;
436 ret = nfsd_reply_cache_init(nn);
445 nfsd4_ssc_init_umount_work(nn);
447 nn->nfsd_net_up = true;
451 nfsd_reply_cache_shutdown(nn);
455 if (nn->lockd_up) {
457 nn->lockd_up = false;
466 struct nfsd_net *nn = net_generic(net, nfsd_net_id);
469 nfsd_reply_cache_shutdown(nn);
471 if (nn->lockd_up) {
473 nn->lockd_up = false;
475 nn->nfsd_net_up = false;
486 struct nfsd_net *nn = net_generic(net, nfsd_net_id);
489 if (event != NETDEV_DOWN || !nn->nfsd_serv)
493 if (nn->nfsd_serv) {
497 svc_age_temp_xprts_now(nn->nfsd_serv, (struct sockaddr *)&sin);
516 struct nfsd_net *nn = net_generic(net, nfsd_net_id);
519 if (event != NETDEV_DOWN || !nn->nfsd_serv)
523 if (nn->nfsd_serv) {
529 svc_age_temp_xprts_now(nn->nfsd_serv, (struct sockaddr *)&sin6);
547 struct nfsd_net *nn = net_generic(net, nfsd_net_id);
548 struct svc_serv *serv = nn->nfsd_serv;
551 nn->nfsd_serv = NULL;
571 if (!nn->nfsd_net_up)
579 void nfsd_reset_versions(struct nfsd_net *nn)
584 if (nfsd_vers(nn, i, NFSD_TEST))
589 nfsd_vers(nn, i, NFSD_SET);
592 while (nfsd_minorversion(nn, minor, NFSD_SET) >= 0)
641 struct nfsd_net *nn = net_generic(net, nfsd_net_id);
645 serv = nn->nfsd_serv;
667 struct nfsd_net *nn = net_generic(net, nfsd_net_id);
671 if (nn->nfsd_serv) {
672 svc_get(nn->nfsd_serv);
677 nfsd_reset_versions(nn);
682 serv->sv_maxconn = nn->max_connections;
689 nn->nfsd_serv = serv;
700 nfsd_reset_write_verifier(nn);
706 struct nfsd_net *nn = net_generic(net, nfsd_net_id);
708 if (nn->nfsd_serv == NULL)
711 return nn->nfsd_serv->sv_nrpools;
717 struct nfsd_net *nn = net_generic(net, nfsd_net_id);
719 if (nn->nfsd_serv != NULL) {
720 for (i = 0; i < nn->nfsd_serv->sv_nrpools && i < n; i++)
721 nthreads[i] = nn->nfsd_serv->sv_pools[i].sp_nrthreads;
732 struct nfsd_net *nn = net_generic(net, nfsd_net_id);
736 if (nn->nfsd_serv == NULL || n <= 0)
739 if (n > nn->nfsd_serv->sv_nrpools)
740 n = nn->nfsd_serv->sv_nrpools;
769 svc_get(nn->nfsd_serv);
771 err = svc_set_num_threads(nn->nfsd_serv,
772 &nn->nfsd_serv->sv_pools[i],
777 svc_put(nn->nfsd_serv);
791 struct nfsd_net *nn = net_generic(net, nfsd_net_id);
801 if (nrservs == 0 && nn->nfsd_serv == NULL)
804 strscpy(nn->nfsd_name, utsname()->nodename,
805 sizeof(nn->nfsd_name));
811 nfsd_up_before = nn->nfsd_net_up;
812 serv = nn->nfsd_serv;
828 if (xchg(&nn->keep_active, 0))
862 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id);
866 nfsd_vers(nn, rqstp->rq_vers, NFSD_TEST)))
872 nfsd_vers(nn, i, NFSD_TEST)) {
882 nfsd_vers(nn, i, NFSD_TEST)) {
907 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id);
910 if (likely(nfsd_vers(nn, rqstp->rq_vers, NFSD_TEST)))
915 if (nfsd_vers(nn, i, NFSD_TEST)) {
924 if (nfsd_vers(nn, i, NFSD_TEST)) {
941 struct nfsd_net *nn = net_generic(net, nfsd_net_id);
962 rqstp->rq_server->sv_maxconn = nn->max_connections;
1079 struct nfsd_net *nn = net_generic(inode->i_sb->s_fs_info, nfsd_net_id);
1082 if (nn->nfsd_serv == NULL) {
1086 svc_get(nn->nfsd_serv);
1087 ret = svc_pool_stats_open(nn->nfsd_serv, file);