Lines Matching defs:slp
298 struct nfssvc_sock *slp;
374 slp = nfsd->nfsd_slp;
380 LIST_FOREACH(nuidp, NUIDHASH(slp, nsd->nsd_cr.cr_uid),
397 if (slp->ns_numuids < nuidhash_max) {
398 slp->ns_numuids++;
402 if ((slp->ns_flags & SLP_VALID) == 0) {
407 nuidp = TAILQ_FIRST(&slp->ns_uidlruhead);
409 TAILQ_REMOVE(&slp->ns_uidlruhead, nuidp,
446 TAILQ_INSERT_TAIL(&slp->ns_uidlruhead, nuidp,
448 LIST_INSERT_HEAD(NUIDHASH(slp, nsd->nsd_uid),
469 struct nfssvc_sock *slp;
471 slp = kmem_alloc(sizeof(*slp), KM_SLEEP);
472 memset(slp, 0, sizeof (struct nfssvc_sock));
473 mutex_init(&slp->ns_lock, MUTEX_DRIVER, IPL_SOFTNET);
474 mutex_init(&slp->ns_alock, MUTEX_DRIVER, IPL_SOFTNET);
475 cv_init(&slp->ns_cv, "nfsdsock");
476 TAILQ_INIT(&slp->ns_uidlruhead);
477 LIST_INIT(&slp->ns_tq);
478 SIMPLEQ_INIT(&slp->ns_sendq);
480 TAILQ_INSERT_TAIL(&nfssvc_sockhead, slp, ns_chain);
483 return slp;
487 nfsrv_sockfree(struct nfssvc_sock *slp)
490 KASSERT(slp->ns_so == NULL);
491 KASSERT(slp->ns_fp == NULL);
492 KASSERT((slp->ns_flags & SLP_VALID) == 0);
493 mutex_destroy(&slp->ns_lock);
494 mutex_destroy(&slp->ns_alock);
495 cv_destroy(&slp->ns_cv);
496 kmem_free(slp, sizeof(*slp));
506 struct nfssvc_sock *slp;
564 slp = tslp;
566 slp = nfsrv_sockalloc();
568 slp->ns_so = so;
569 slp->ns_nam = mynam;
573 slp->ns_fp = fp;
574 slp->ns_flags = SLP_VALID;
575 slp->ns_aflags = SLP_A_NEEDQ;
576 slp->ns_gflags = 0;
577 slp->ns_sflags = 0;
579 so->so_upcallarg = (void *)slp;
583 nfsrv_wakenfsd(slp);
597 struct nfssvc_sock *slp;
649 slp = nfsd->nfsd_slp;
651 if (!slp)
655 if (slp) {
656 nfsrv_wakenfsd(slp);
657 nfsrv_slpderef(slp);
664 slp = TAILQ_FIRST(&nfssvc_sockpending);
665 if (slp) {
666 KASSERT((slp->ns_gflags & SLP_G_DOREC)
668 TAILQ_REMOVE(&nfssvc_sockpending, slp,
670 slp->ns_gflags &= ~SLP_G_DOREC;
671 slp->ns_sref++;
672 nfsd->nfsd_slp = slp;
679 if ((slp = nfsd->nfsd_slp) == NULL)
681 if (slp->ns_flags & SLP_VALID) {
684 if (nfsdsock_testbits(slp, SLP_A_NEEDQ)) {
685 nfsrv_rcv(slp);
687 if (nfsdsock_testbits(slp, SLP_A_DISCONN)) {
688 nfsrv_zapsock(slp);
690 error = nfsrv_dorec(slp, nfsd, &nd, &more);
699 nd2 = LIST_FIRST(&slp->ns_tq);
709 nfsrv_wakenfsd(slp);
714 slp = nfsd->nfsd_slp;
716 KASSERT(slp != NULL);
717 KASSERT(nfsd->nfsd_slp == slp);
718 if (error || (slp->ns_flags & SLP_VALID) == 0) {
724 nfsrv_slpderef(slp);
727 sotype = slp->ns_so->so_type;
733 nd->nd_nam = slp->ns_nam;
753 cacherep = nfsrv_getcache(nd, slp, &mreq);
777 error = nfsrv_writegather(&nd, slp,
782 (nd, slp, l, &mreq);
832 nfsd_rt(slp->ns_so->so_type, nd,
835 error = nfsdsock_sendreply(slp, nd);
839 nfsrv_zapsock(slp);
842 nfsrv_slpderef(slp);
868 if (LIST_FIRST(&slp->ns_tq) &&
869 LIST_FIRST(&slp->ns_tq)->nd_time <= cur_usec) {
876 if (nfsrv_dorec(slp, nfsd, &nd, &dummy)) {
878 nfsrv_slpderef(slp);
907 nfsrv_zapsock(struct nfssvc_sock *slp)
914 if (nfsdsock_drain(slp)) {
918 if (slp->ns_gflags & SLP_G_DOREC) {
919 TAILQ_REMOVE(&nfssvc_sockpending, slp, ns_pending);
920 slp->ns_gflags &= ~SLP_G_DOREC;
924 so = slp->ns_so;
933 m_freem(slp->ns_raw);
934 m = slp->ns_rec;
943 for (nuidp = TAILQ_FIRST(&slp->ns_uidlruhead); nuidp != 0;
947 TAILQ_REMOVE(&slp->ns_uidlruhead, nuidp, nu_lru);
953 while ((nwp = LIST_FIRST(&slp->ns_tq)) != NULL) {
967 nfsrv_slpderef(struct nfssvc_sock *slp)
972 KASSERT(slp->ns_sref > 0);
973 ref = --slp->ns_sref;
974 if (ref == 0 && (slp->ns_flags & SLP_VALID) == 0) {
977 KASSERT((slp->ns_gflags & SLP_G_DOREC) == 0);
978 TAILQ_REMOVE(&nfssvc_sockhead, slp, ns_chain);
981 fp = slp->ns_fp;
983 slp->ns_fp = NULL;
985 KASSERT(fp->f_socket == slp->ns_so);
988 slp->ns_so = NULL;
991 if (slp->ns_nam)
992 m_free(slp->ns_nam);
993 nfsrv_sockfree(slp);
1006 struct nfssvc_sock *slp;
1021 while ((slp = TAILQ_FIRST(&nfssvc_sockhead)) != NULL) {
1023 KASSERT(slp->ns_sref == 0);
1024 slp->ns_sref++;
1025 nfsrv_zapsock(slp);
1026 nfsrv_slpderef(slp);