Lines Matching defs:nfsd
112 static struct nfsd *nfsd_bake_cookie(struct nfsd *);
113 static void nfsd_toss_cookie(struct nfsd *);
114 static struct nfsd *nfsd_get(struct nfsd *);
125 .rbto_node_offset = offsetof(struct nfsd, nfsd_node),
131 const struct nfsd *na = va;
132 const struct nfsd *nb = vb;
144 const struct nfsd *n = vn;
155 * nfsd_bake_cookie(nfsd)
157 * Bake a cookie for nfsd, hang it on the tree of nfsds, and
161 static struct nfsd *
162 nfsd_bake_cookie(struct nfsd *nfsd)
168 nfsd->nfsd_cookie = cprng_fast32();
169 } while (nfsd->nfsd_cookie == 0 ||
170 rb_tree_insert_node(&nfsd_tree, nfsd) != nfsd);
172 return (struct nfsd *)(uintptr_t)nfsd->nfsd_cookie;
176 * nfsd_toss_cookie(nfsd)
178 * Toss nfsd's cookie.
181 nfsd_toss_cookie(struct nfsd *nfsd)
185 KASSERT(nfsd->nfsd_cookie != 0);
187 rb_tree_remove_node(&nfsd_tree, nfsd);
188 nfsd->nfsd_cookie = 0; /* paranoia */
194 * Return the struct nfsd pointer for the userland nfsdu cookie,
196 * not a current valid nfsd cookie.
199 * nfsd *)(uintptr_t)0, which is the sentinel value for no nfsd
202 static struct nfsd *
203 nfsd_get(struct nfsd *nfsdu)
207 struct nfsd *nfsd;
215 nfsd = rb_tree_find_node(&nfsd_tree, &key);
218 return nfsd;
269 * Nfs server pseudo system call for the nfsd's
272 * - remains in the kernel as an nfsd
297 struct nfsd *nfsd = NULL;
369 (nfsd = nfsd_get(nsd->nsd_nfsd)) == NULL)
372 nfsd != NULL &&
373 (nfsd->nfsd_slp->ns_flags & SLP_VALID)) {
374 slp = nfsd->nfsd_slp;
377 * First check to see if another nfsd has already
384 (!nfsd->nfsd_nd->nd_nam2 ||
386 &nuidp->nu_haddr, nfsd->nfsd_nd->nd_nam2)))
391 nfsd->nfsd_nd->nd_cr = nuidp->nu_cr;
392 nfsd->nfsd_nd->nd_flag |= ND_KERBFULL;
424 if (nfsd->nfsd_nd->nd_nam2) {
427 saddr = mtod(nfsd->nfsd_nd->nd_nam2,
438 nfsd->nfsd_nd->nd_nam2, 0,
451 nfsd->nfsd_nd->nd_cr = nuidp->nu_cr;
452 nfsd->nfsd_nd->nd_flag |= ND_KERBFULL;
457 nfsd != NULL)
458 nfsd->nfsd_flag |= NFSD_AUTHFAIL;
598 struct nfsd *nfsd;
611 * If userland didn't provide an nfsd cookie, bake a fresh one;
615 nfsd = kmem_alloc(sizeof(*nfsd), KM_SLEEP);
616 memset(nfsd, 0, sizeof (struct nfsd));
617 cv_init(&nfsd->nfsd_cv, "nfsd");
618 nfsd->nfsd_procp = p;
624 nsd->nsd_nfsd = nfsd_bake_cookie(nfsd);
627 } else if ((nfsd = nfsd_get(nsd->nsd_nfsd)) == NULL) {
630 KASSERT(nfsd != NULL);
631 KASSERT(nsd->nsd_nfsd != (struct nfsd *)(uintptr_t)0);
641 if (nfsd->nfsd_slp == NULL) {
643 while (nfsd->nfsd_slp == NULL &&
645 SLIST_INSERT_HEAD(&nfsd_idle_head, nfsd,
647 error = cv_wait_sig(&nfsd->nfsd_cv, &nfsd_lock);
649 slp = nfsd->nfsd_slp;
650 nfsd->nfsd_slp = NULL;
653 nfsd, nfsd, nfsd_idle);
662 if (nfsd->nfsd_slp == NULL &&
672 nfsd->nfsd_slp = slp;
676 KASSERT(nfsd->nfsd_slp == NULL ||
677 nfsd->nfsd_slp->ns_sref > 0);
679 if ((slp = nfsd->nfsd_slp) == NULL)
690 error = nfsrv_dorec(slp, nfsd, &nd, &more);
714 slp = nfsd->nfsd_slp;
717 KASSERT(nfsd->nfsd_slp == slp);
723 nfsd->nfsd_slp = NULL;
738 if (nfsd->nfsd_flag & NFSD_NEEDAUTH) {
739 nfsd->nfsd_flag &= ~NFSD_NEEDAUTH;
742 nsd->nsd_authlen = nfsd->nfsd_authlen;
743 nsd->nsd_verflen = nfsd->nfsd_verflen;
744 if (!copyout(nfsd->nfsd_authstr,
745 nsd->nsd_authstr, nfsd->nfsd_authlen) &&
746 !copyout(nfsd->nfsd_verfstr,
747 nsd->nsd_verfstr, nfsd->nfsd_verflen) &&
755 if (nfsd->nfsd_flag & NFSD_AUTHFAIL) {
756 nfsd->nfsd_flag &= ~NFSD_AUTHFAIL;
841 nfsd->nfsd_slp = NULL;
876 if (nfsrv_dorec(slp, nfsd, &nd, &dummy)) {
877 nfsd->nfsd_slp = NULL;
883 nfsd_toss_cookie(nfsd);
888 cv_destroy(&nfsd->nfsd_cv);
889 kmem_free(nfsd, sizeof(*nfsd));
890 KASSERT(nsd->nsd_nfsd != (struct nfsd *)(uintptr_t)0);
891 nsd->nsd_nfsd = (struct nfsd *)(uintptr_t)0;
1015 panic("nfsd init");