Lines Matching refs:rp

225 	struct nfsrvcache *rp;
238 for (rp = NFSRCHASH(nd->nd_retxid)->lh_first; rp != 0;
239 rp = rp->rc_hash.le_next) {
240 if (nd->nd_retxid == rp->rc_xid && nd->nd_procnum == rp->rc_proc &&
241 netaddr_match(rp->rc_family, &rp->rc_haddr, nd->nd_nam)) {
242 if ((rp->rc_flag & RC_LOCKED) != 0) {
243 rp->rc_flag |= RC_WANTED;
244 msleep(rp, nfsrv_reqcache_mutex, PZERO-1, "nfsrc", NULL);
247 rp->rc_flag |= RC_LOCKED;
249 if (rp->rc_lru.tqe_next) {
250 TAILQ_REMOVE(&nfsrv_reqcache_lruhead, rp, rc_lru);
251 TAILQ_INSERT_TAIL(&nfsrv_reqcache_lruhead, rp, rc_lru);
253 if (rp->rc_state == RC_UNUSED)
255 if (rp->rc_state == RC_INPROG) {
258 } else if (rp->rc_flag & RC_REPSTATUS) {
260 nd->nd_repstat = rp->rc_status;
270 } else if (rp->rc_flag & RC_REPMBUF) {
272 error = mbuf_copym(rp->rc_reply, 0, MBUF_COPYALL, MBUF_WAITOK, mrepp);
281 rp->rc_state = RC_INPROG;
284 rp->rc_flag &= ~RC_LOCKED;
285 if (rp->rc_flag & RC_WANTED) {
286 rp->rc_flag &= ~RC_WANTED;
287 wakeup(rp);
296 MALLOC(rp, struct nfsrvcache *, sizeof *rp, M_NFSD, M_WAITOK);
297 if (rp) {
298 bzero((char *)rp, sizeof *rp);
300 rp->rc_flag = RC_LOCKED;
303 rp = NULL;
305 if (!rp) {
307 rp = nfsrv_reqcache_lruhead.tqh_first;
308 if (!rp) {
314 while ((rp->rc_flag & RC_LOCKED) != 0) {
315 rp->rc_flag |= RC_WANTED;
316 msleep(rp, nfsrv_reqcache_mutex, PZERO-1, "nfsrc", NULL);
317 rp = nfsrv_reqcache_lruhead.tqh_first;
319 rp->rc_flag |= RC_LOCKED;
320 LIST_REMOVE(rp, rc_hash);
321 TAILQ_REMOVE(&nfsrv_reqcache_lruhead, rp, rc_lru);
322 if (rp->rc_flag & RC_REPMBUF)
323 mbuf_freem(rp->rc_reply);
324 if (rp->rc_flag & RC_NAM)
325 mbuf_freem(rp->rc_nam);
326 rp->rc_flag &= (RC_LOCKED | RC_WANTED);
328 TAILQ_INSERT_TAIL(&nfsrv_reqcache_lruhead, rp, rc_lru);
329 rp->rc_state = RC_INPROG;
330 rp->rc_xid = nd->nd_retxid;
332 rp->rc_family = saddr->sa_family;
335 rp->rc_flag |= RC_INETADDR;
336 rp->rc_inetaddr = ((struct sockaddr_in*)saddr)->sin_addr.s_addr;
339 rp->rc_flag |= RC_INETADDR;
340 rp->rc_inet6addr = ((struct sockaddr_in6*)saddr)->sin6_addr;
343 error = mbuf_copym(nd->nd_nam, 0, MBUF_COPYALL, MBUF_WAITOK, &rp->rc_nam);
347 rp->rc_flag |= RC_NAM;
350 rp->rc_proc = nd->nd_procnum;
351 LIST_INSERT_HEAD(NFSRCHASH(nd->nd_retxid), rp, rc_hash);
352 rp->rc_flag &= ~RC_LOCKED;
353 if (rp->rc_flag & RC_WANTED) {
354 rp->rc_flag &= ~RC_WANTED;
355 wakeup(rp);
370 struct nfsrvcache *rp;
377 for (rp = NFSRCHASH(nd->nd_retxid)->lh_first; rp != 0;
378 rp = rp->rc_hash.le_next) {
379 if (nd->nd_retxid == rp->rc_xid && nd->nd_procnum == rp->rc_proc &&
380 netaddr_match(rp->rc_family, &rp->rc_haddr, nd->nd_nam)) {
381 if ((rp->rc_flag & RC_LOCKED) != 0) {
382 rp->rc_flag |= RC_WANTED;
383 msleep(rp, nfsrv_reqcache_mutex, PZERO-1, "nfsrc", NULL);
386 rp->rc_flag |= RC_LOCKED;
387 if (rp->rc_state == RC_DONE) {
394 if (rp->rc_flag & RC_REPMBUF) {
395 mbuf_freem(rp->rc_reply);
396 rp->rc_flag &= ~RC_REPMBUF;
399 rp->rc_state = RC_DONE;
407 rp->rc_status = nd->nd_repstat;
408 rp->rc_flag |= RC_REPSTATUS;
410 error = mbuf_copym(repmbuf, 0, MBUF_COPYALL, MBUF_WAITOK, &rp->rc_reply);
412 rp->rc_flag |= RC_REPMBUF;
415 rp->rc_flag &= ~RC_LOCKED;
416 if (rp->rc_flag & RC_WANTED) {
417 rp->rc_flag &= ~RC_WANTED;
418 wakeup(rp);
433 struct nfsrvcache *rp, *nextrp;
436 for (rp = nfsrv_reqcache_lruhead.tqh_first; rp != 0; rp = nextrp) {
437 nextrp = rp->rc_lru.tqe_next;
438 LIST_REMOVE(rp, rc_hash);
439 TAILQ_REMOVE(&nfsrv_reqcache_lruhead, rp, rc_lru);
440 _FREE(rp, M_NFSD);