Home | History | Annotate | Download | only in nfs

Lines Matching defs:slp

115 	struct nfssvc_sock *slp = (struct nfssvc_sock *)arg;
117 nfsdsock_setbits(slp, SLP_A_NEEDQ);
118 nfsrv_wakenfsd(slp);
122 nfsrv_rcv(struct nfssvc_sock *slp)
132 error = nfsdsock_lock(slp, true);
138 nfsdsock_clearbits(slp, SLP_A_NEEDQ);
140 so = slp->ns_so;
158 if (slp->ns_rawend) {
159 slp->ns_rawend->m_next = m;
160 slp->ns_cc += 1000000000 - auio.uio_resid;
162 slp->ns_raw = m;
163 slp->ns_cc = 1000000000 - auio.uio_resid;
167 slp->ns_rawend = m;
172 error = nfsrv_getstream(slp, M_WAIT);
193 if (slp->ns_recend)
194 slp->ns_recend->m_nextpkt = m;
196 slp->ns_rec = m;
197 slp->ns_recend = m;
210 nfsdsock_unlock(slp);
214 nfsdsock_setbits(slp, setflags);
219 nfsdsock_lock(struct nfssvc_sock *slp, bool waitok)
222 mutex_enter(&slp->ns_lock);
223 while ((~slp->ns_flags & (SLP_BUSY|SLP_VALID)) == 0) {
225 mutex_exit(&slp->ns_lock);
228 cv_wait(&slp->ns_cv, &slp->ns_lock);
230 if ((slp->ns_flags & SLP_VALID) == 0) {
231 mutex_exit(&slp->ns_lock);
234 KASSERT((slp->ns_flags & SLP_BUSY) == 0);
235 slp->ns_flags |= SLP_BUSY;
236 mutex_exit(&slp->ns_lock);
242 nfsdsock_unlock(struct nfssvc_sock *slp)
245 mutex_enter(&slp->ns_lock);
246 KASSERT((slp->ns_flags & SLP_BUSY) != 0);
247 cv_broadcast(&slp->ns_cv);
248 slp->ns_flags &= ~SLP_BUSY;
249 mutex_exit(&slp->ns_lock);
253 nfsdsock_drain(struct nfssvc_sock *slp)
257 mutex_enter(&slp->ns_lock);
258 if ((slp->ns_flags & SLP_VALID) == 0) {
262 slp->ns_flags &= ~SLP_VALID;
263 while ((slp->ns_flags & SLP_BUSY) != 0) {
264 cv_wait(&slp->ns_cv, &slp->ns_lock);
267 mutex_exit(&slp->ns_lock);
278 nfsrv_getstream(struct nfssvc_sock *slp, int waitflag)
285 KASSERT((slp->ns_flags & SLP_BUSY) != 0);
287 if (slp->ns_reclen == 0) {
288 if (slp->ns_cc < NFSX_UNSIGNED) {
291 m = slp->ns_raw;
294 slp->ns_cc -= NFSX_UNSIGNED;
296 slp->ns_reclen = recmark & ~0x80000000;
298 slp->ns_sflags |= SLP_S_LASTFRAG;
300 slp->ns_sflags &= ~SLP_S_LASTFRAG;
301 if (slp->ns_reclen > NFS_MAXPACKET) {
310 * Note that slp->ns_reclen may be 0. Linux sometimes
313 if (slp->ns_cc == slp->ns_reclen) {
314 recm = slp->ns_raw;
315 slp->ns_raw = slp->ns_rawend = (struct mbuf *)0;
316 slp->ns_cc = slp->ns_reclen = 0;
317 } else if (slp->ns_cc > slp->ns_reclen) {
318 recm = slp->ns_raw;
319 m = m_split(recm, slp->ns_reclen, waitflag);
325 slp->ns_raw = m;
328 slp->ns_rawend = m;
329 slp->ns_cc -= slp->ns_reclen;
330 slp->ns_reclen = 0;
338 mpp = &slp->ns_frag;
342 if (slp->ns_sflags & SLP_S_LASTFRAG) {
343 if (slp->ns_recend)
344 slp->ns_recend->m_nextpkt = slp->ns_frag;
346 slp->ns_rec = slp->ns_frag;
347 slp->ns_recend = slp->ns_frag;
348 slp->ns_frag = NULL;
359 nfsrv_dorec(struct nfssvc_sock *slp, struct nfsd *nfsd,
369 if (nfsdsock_lock(slp, true)) {
372 m = slp->ns_rec;
374 nfsdsock_unlock(slp);
377 slp->ns_rec = m->m_nextpkt;
378 if (slp->ns_rec) {
382 slp->ns_recend = NULL;
384 nfsdsock_unlock(slp);
411 struct nfssvc_sock *slp;
424 TAILQ_FOREACH(slp, &nfssvc_sockhead, ns_chain) {
425 nd = LIST_FIRST(&slp->ns_tq);
428 nfsrv_wakenfsd_locked(slp);
443 nfsrv_wakenfsd_locked(struct nfssvc_sock *slp)
449 if ((slp->ns_flags & SLP_VALID) == 0)
451 if (slp->ns_gflags & SLP_G_DOREC)
458 slp->ns_sref++;
459 KASSERT(slp->ns_sref > 0);
460 nd->nfsd_slp = slp;
463 slp->ns_gflags |= SLP_G_DOREC;
465 TAILQ_INSERT_TAIL(&nfssvc_sockpending, slp, ns_pending);
470 nfsrv_wakenfsd(struct nfssvc_sock *slp)
474 nfsrv_wakenfsd_locked(slp);
479 nfsdsock_sendreply(struct nfssvc_sock *slp, struct nfsrv_descript *nd)
486 mutex_enter(&slp->ns_lock);
487 if ((slp->ns_flags & SLP_SENDING) != 0) {
488 SIMPLEQ_INSERT_TAIL(&slp->ns_sendq, nd, nd_sendq);
489 mutex_exit(&slp->ns_lock);
492 KASSERT(SIMPLEQ_EMPTY(&slp->ns_sendq));
493 slp->ns_flags |= SLP_SENDING;
494 mutex_exit(&slp->ns_lock);
497 error = nfs_send(slp->ns_so, nd->nd_nam2, nd->nd_mreq, NULL, curlwp);
503 mutex_enter(&slp->ns_lock);
504 KASSERT((slp->ns_flags & SLP_SENDING) != 0);
505 nd = SIMPLEQ_FIRST(&slp->ns_sendq);
507 SIMPLEQ_REMOVE_HEAD(&slp->ns_sendq, nd_sendq);
508 mutex_exit(&slp->ns_lock);
511 slp->ns_flags &= ~SLP_SENDING;
512 mutex_exit(&slp->ns_lock);
518 nfsdsock_setbits(struct nfssvc_sock *slp, int bits)
521 mutex_enter(&slp->ns_alock);
522 slp->ns_aflags |= bits;
523 mutex_exit(&slp->ns_alock);
527 nfsdsock_clearbits(struct nfssvc_sock *slp, int bits)
530 mutex_enter(&slp->ns_alock);
531 slp->ns_aflags &= ~bits;
532 mutex_exit(&slp->ns_alock);
536 nfsdsock_testbits(struct nfssvc_sock *slp, int bits)
539 return (slp->ns_aflags & bits);