Lines Matching defs:slp

127 					    struct nfsrv_sock *slp,
734 struct nfsrv_sock *slp;
786 MALLOC(slp, struct nfsrv_sock *, sizeof(struct nfsrv_sock), M_NFSSVC, M_WAITOK);
787 if (!slp) {
791 bzero((caddr_t)slp, sizeof (struct nfsrv_sock));
792 lck_rw_init(&slp->ns_rwlock, nfsrv_slp_rwlock_group, LCK_ATTR_NULL);
793 lck_mtx_init(&slp->ns_wgmutex, nfsrv_slp_mutex_group, LCK_ATTR_NULL);
802 nfsrv_slpfree(slp);
806 nfsrv_udpsock = slp;
812 nfsrv_slpfree(slp);
816 nfsrv_udp6sock = slp;
822 TAILQ_INSERT_TAIL(&nfsrv_socklist, slp, ns_chain);
825 slp->ns_so = so;
826 slp->ns_sotype = sotype;
827 slp->ns_nam = mynam;
830 nfsrv_uc_addsock(slp, first);
833 slp->ns_wgq.tqe_next = SLPNOLIST;
835 slp->ns_flag = SLP_VALID | SLP_NEEDQ;
837 nfsrv_wakenfsd(slp);
882 struct nfsrv_sock *slp;
921 slp = nfsd->nfsd_slp;
925 slp = nfsd->nfsd_slp;
952 slp = nfsd->nfsd_slp;
953 if (!slp && !TAILQ_EMPTY(&nfsrv_sockwait)) {
955 while ((slp = TAILQ_FIRST(&nfsrv_sockwait))) {
956 lck_rw_lock_exclusive(&slp->ns_rwlock);
958 TAILQ_REMOVE(&nfsrv_sockwait, slp, ns_svcq);
959 slp->ns_flag &= ~SLP_WAITQ;
960 if ((slp->ns_flag & SLP_VALID) && (slp->ns_flag & SLP_WORKTODO))
963 lck_rw_done(&slp->ns_rwlock);
966 if (!slp && !TAILQ_EMPTY(&nfsrv_sockwork)) {
968 while ((slp = TAILQ_FIRST(&nfsrv_sockwork))) {
969 lck_rw_lock_exclusive(&slp->ns_rwlock);
971 TAILQ_REMOVE(&nfsrv_sockwork, slp, ns_svcq);
972 slp->ns_flag &= ~SLP_WORKQ;
973 if ((slp->ns_flag & SLP_VALID) && (slp->ns_flag & SLP_WORKTODO))
976 lck_rw_done(&slp->ns_rwlock);
979 if (!nfsd->nfsd_slp && slp) {
981 slp->ns_sref++;
982 nfsd->nfsd_slp = slp;
985 TAILQ_INSERT_TAIL(&nfsrv_sockwork, slp, ns_svcq);
986 slp->ns_flag |= SLP_WORKQ;
987 lck_rw_done(&slp->ns_rwlock);
990 if (!slp)
992 lck_rw_lock_exclusive(&slp->ns_rwlock);
993 if (slp->ns_flag & SLP_VALID) {
994 if ((slp->ns_flag & (SLP_NEEDQ|SLP_DISCONN)) == SLP_NEEDQ) {
995 slp->ns_flag &= ~SLP_NEEDQ;
996 nfsrv_rcv_locked(slp->ns_so, slp, MBUF_WAITOK);
998 if (slp->ns_flag & SLP_DISCONN)
999 nfsrv_zapsock(slp);
1000 error = nfsrv_dorec(slp, nfsd, &nd);
1002 if (slp->ns_sotype == SOCK_STREAM)
1003 nfsrv_zapsock(slp); // drop connection
1006 if (error && (slp->ns_wgtime || (slp->ns_flag & SLP_DOWRITES))) {
1010 if (slp->ns_wgtime <= cur_usec) {
1015 slp->ns_flag &= ~SLP_DOWRITES;
1019 lck_rw_done(&slp->ns_rwlock);
1021 if (error || (slp && !(slp->ns_flag & SLP_VALID))) {
1035 if (slp)
1036 nfsrv_slpderef(slp);
1046 nd->nd_nam = slp->ns_nam;
1048 cacherep = nfsrv_getcache(nd, slp, &mrep);
1082 error = nfsrv_writegather(&nd, slp, &context, &mrep);
1084 error = (*(nfsrv_procs[nd->nd_procnum]))(nd, slp, &context, &mrep);
1092 if (error && slp->ns_sotype == SOCK_STREAM) {
1093 lck_rw_lock_exclusive(&slp->ns_rwlock);
1094 nfsrv_zapsock(slp);
1095 lck_rw_done(&slp->ns_rwlock);
1149 if (slp->ns_sotype == SOCK_STREAM) {
1155 if (slp->ns_flag & SLP_VALID) {
1156 error = nfsrv_send(slp, nd->nd_nam2, m);
1170 lck_rw_lock_exclusive(&slp->ns_rwlock);
1171 nfsrv_zapsock(slp);
1172 lck_rw_done(&slp->ns_rwlock);
1181 nfsrv_slpderef(slp);
1209 if (slp->ns_wgtime) {
1213 if (slp->ns_wgtime <= cur_usec) {
1222 lck_rw_lock_exclusive(&slp->ns_rwlock);
1223 error = nfsrv_dorec(slp, nfsd, &nd);
1225 if (slp->ns_sotype == SOCK_STREAM)
1226 nfsrv_zapsock(slp); // drop connection
1228 lck_rw_done(&slp->ns_rwlock);
1234 nfsrv_slpderef(slp);
1289 nfsrv_zapsock(struct nfsrv_sock *slp)
1293 if ((slp->ns_flag & SLP_VALID) == 0)
1295 slp->ns_flag &= ~SLP_ALLFLAGS;
1297 so = slp->ns_so;
1315 nfsrv_uc_dequeue(slp);
1322 nfsrv_slpfree(struct nfsrv_sock *slp)
1326 if (slp->ns_so) {
1327 sock_release(slp->ns_so);
1328 slp->ns_so = NULL;
1330 if (slp->ns_nam)
1331 mbuf_free(slp->ns_nam);
1332 if (slp->ns_raw)
1333 mbuf_freem(slp->ns_raw);
1334 if (slp->ns_rec)
1335 mbuf_freem(slp->ns_rec);
1336 if (slp->ns_frag)
1337 mbuf_freem(slp->ns_frag);
1338 slp->ns_nam = slp->ns_raw = slp->ns_rec = slp->ns_frag = NULL;
1339 slp->ns_reccnt = 0;
1341 if (slp->ns_ua)
1342 FREE(slp->ns_ua, M_NFSSVC);
1344 for (nwp = slp->ns_tq.lh_first; nwp; nwp = nnwp) {
1358 LIST_INIT(&slp->ns_tq);
1360 lck_rw_destroy(&slp->ns_rwlock, nfsrv_slp_rwlock_group);
1361 lck_mtx_destroy(&slp->ns_wgmutex, nfsrv_slp_mutex_group);
1362 FREE(slp, M_NFSSVC);
1370 nfsrv_slpderef(struct nfsrv_sock *slp)
1375 lck_rw_lock_exclusive(&slp->ns_rwlock);
1376 slp->ns_sref--;
1378 if (slp->ns_sref || (slp->ns_flag & SLP_VALID)) {
1379 if ((slp->ns_flag & SLP_QUEUED) && !(slp->ns_flag & SLP_WORKTODO)) {
1381 if (slp->ns_flag & SLP_WAITQ)
1382 TAILQ_REMOVE(&nfsrv_sockwait, slp, ns_svcq);
1384 TAILQ_REMOVE(&nfsrv_sockwork, slp, ns_svcq);
1385 slp->ns_flag &= ~SLP_QUEUED;
1387 lck_rw_done(&slp->ns_rwlock);
1394 if (slp->ns_flag & SLP_QUEUED) {
1395 if (slp->ns_flag & SLP_WAITQ)
1396 TAILQ_REMOVE(&nfsrv_sockwait, slp, ns_svcq);
1398 TAILQ_REMOVE(&nfsrv_sockwork, slp, ns_svcq);
1399 slp->ns_flag &= ~SLP_QUEUED;
1409 slp->ns_timestamp = now.tv_sec;
1410 TAILQ_REMOVE(&nfsrv_socklist, slp, ns_chain);
1411 TAILQ_INSERT_TAIL(&nfsrv_deadsocklist, slp, ns_chain);
1418 lck_rw_done(&slp->ns_rwlock);
1420 if (slp->ns_wgq.tqe_next != SLPNOLIST) {
1421 TAILQ_REMOVE(&nfsrv_sockwg, slp, ns_wgq);
1422 slp->ns_wgq.tqe_next = SLPNOLIST;
1435 struct nfsrv_sock *slp;
1442 while ((slp = TAILQ_FIRST(&nfsrv_deadsocklist))) {
1443 if ((slp->ns_timestamp + NFSRV_DEADSOCKDELAY) > now.tv_sec)
1445 TAILQ_REMOVE(&nfsrv_deadsocklist, slp, ns_chain);
1446 nfsrv_slpfree(slp);
1453 time_to_wait = (slp->ns_timestamp + NFSRV_DEADSOCKDELAY) - now.tv_sec;
1469 struct nfsrv_sock *slp, *nslp;
1477 for (slp = TAILQ_FIRST(&nfsrv_socklist); slp != 0; slp = nslp) {
1478 nslp = TAILQ_NEXT(slp, ns_chain);
1479 if (slp->ns_flag & SLP_VALID) {
1480 lck_rw_lock_exclusive(&slp->ns_rwlock);
1481 nfsrv_zapsock(slp);
1482 lck_rw_done(&slp->ns_rwlock);
1484 if (slp->ns_flag & SLP_QUEUED) {
1485 if (slp->ns_flag & SLP_WAITQ)
1486 TAILQ_REMOVE(&nfsrv_sockwait, slp, ns_svcq);
1488 TAILQ_REMOVE(&nfsrv_sockwork, slp, ns_svcq);
1489 slp->ns_flag &= ~SLP_QUEUED;
1491 if (slp->ns_wgq.tqe_next != SLPNOLIST) {
1492 TAILQ_REMOVE(&nfsrv_sockwg, slp, ns_wgq);
1493 slp->ns_wgq.tqe_next = SLPNOLIST;
1496 slp->ns_timestamp = now.tv_sec;
1497 TAILQ_REMOVE(&nfsrv_socklist, slp, ns_chain);
1498 TAILQ_INSERT_TAIL(&nfsrv_deadsocklist, slp, ns_chain);