}
getblk(vp, blkno, size, slpflag, slptimeo)	register struct vnode *vp;	daddr_t blkno;	int size, slpflag, slptimeo;{	struct buf *bp, *nbp = NULL;	int s, err;start:	bp = incore(vp, blkno);	if (bp != NULL) {		s = splbio();		if (ISSET(bp->b_flags, B_BUSY)) {			SET(bp->b_flags, B_WANTED);			err = tsleep(bp, slpflag | (PRIBIO + 1), "getblk",			    slptimeo);			splx(s);			if (err) {				if (nbp != NULL) {					SET(nbp->b_flags, B_AGE);					brelse(nbp);				}				return (NULL);			}			goto start;		}		SET(bp->b_flags, (B_BUSY | B_CACHE));		bremfree(bp);		splx(s);	}	if (bp == NULL) {		if (nbp == NULL && getnewbuf(slpflag, slptimeo, &nbp) != 0) {			goto start;		}		bp = nbp;		binshash(bp, BUFHASH(vp, blkno));		bp->b_blkno = bp->b_lblkno = blkno;		s = splbio();		bgetvp(vp, bp);		splx(s);	} else if (nbp != NULL) {		/*		 * Set B_AGE so that buffer appear at BQ_CLEAN head		 * and gets reused ASAP.		 */		SET(nbp->b_flags, B_AGE);		brelse(nbp);	}	allocbuf(bp, size);	return (bp);}