Home | History | Annotate | Download | only in mpool

Lines Matching refs:mp

78 	MPOOL *mp;
95 if ((mp = calloc(1, sizeof(*mp))) == NULL)
97 TAILQ_INIT(&mp->lqh);
99 TAILQ_INIT(&mp->hqh[entry]);
100 mp->maxcache = maxcache;
101 mp->npages = (pgno_t)(sb.st_size / pagesize);
102 mp->pagesize = pagesize;
103 mp->fd = fd;
104 return mp;
112 mpool_filter(MPOOL *mp, void (*pgin)(void *, pgno_t, void *),
115 mp->pgin = pgin;
116 mp->pgout = pgout;
117 mp->pgcookie = pgcookie;
125 mpool_newf(MPOOL *mp, pgno_t *pgnoaddr, unsigned int flags)
130 if (mp->npages == MAX_PAGE_NUMBER) {
135 ++mp->pagenew;
142 if ((bp = mpool_bkt(mp)) == NULL)
146 mp->npages++;
149 bp->pgno = *pgnoaddr = mp->npages++;
153 head = &mp->hqh[HASHKEY(bp->pgno)];
155 TAILQ_INSERT_TAIL(&mp->lqh, bp, q);
160 mpool_new(MPOOL *mp, pgno_t *pgnoaddr)
162 return mpool_newf(mp, pgnoaddr, 0);
166 mpool_delete(MPOOL *mp, void *page)
182 head = &mp->hqh[HASHKEY(bp->pgno)];
184 TAILQ_REMOVE(&mp->lqh, bp, q);
196 mpool_get(MPOOL *mp, pgno_t pgno, unsigned int flags)
204 if (pgno >= mp->npages) {
210 ++mp->pageget;
214 if ((bp = mpool_look(mp, pgno)) != NULL) {
226 head = &mp->hqh[HASHKEY(bp->pgno)];
229 TAILQ_REMOVE(&mp->lqh, bp, q);
230 TAILQ_INSERT_TAIL(&mp->lqh, bp, q);
239 if ((bp = mpool_bkt(mp)) == NULL)
244 ++mp->pageread;
246 off = mp->pagesize * pgno;
247 if (off / mp->pagesize != pgno) {
254 if ((nr = pread(mp->fd, bp->page, (size_t)mp->pagesize, off)) != (int)mp->pagesize) {
263 memset(bp->page, 0, mp->pagesize);
278 head = &mp->hqh[HASHKEY(bp->pgno)];
280 TAILQ_INSERT_TAIL(&mp->lqh, bp, q);
283 if (mp->pgin != NULL)
284 (mp->pgin)(mp->pgcookie, bp->pgno, bp->page);
295 mpool_put(MPOOL *mp, void *page, u_int flags)
300 ++mp->pageput;
321 mpool_close(MPOOL *mp)
326 while (!TAILQ_EMPTY(&mp->lqh)) {
327 bp = TAILQ_FIRST(&mp->lqh);
328 TAILQ_REMOVE(&mp->lqh, bp, q);
333 free(mp);
342 mpool_sync(MPOOL *mp)
347 TAILQ_FOREACH(bp, &mp->lqh, q)
349 mpool_write(mp, bp) == RET_ERROR)
353 return fsync(mp->fd) ? RET_ERROR : RET_SUCCESS;
361 mpool_bkt(MPOOL *mp)
367 if (mp->curcache < mp->maxcache)
376 TAILQ_FOREACH(bp, &mp->lqh, q)
380 mpool_write(mp, bp) == RET_ERROR)
383 ++mp->pageflush;
386 head = &mp->hqh[HASHKEY(bp->pgno)];
388 TAILQ_REMOVE(&mp->lqh, bp, q);
393 (size_t)(sizeof(BKT) + mp->pagesize));
400 new: if ((bp = calloc(1, (size_t)(sizeof(BKT) + mp->pagesize))) == NULL)
403 ++mp->pagealloc;
406 (void)memset(bp, 0xff, (size_t)(sizeof(BKT) + mp->pagesize));
409 ++mp->curcache;
418 mpool_write(MPOOL *mp, BKT *bp)
423 ++mp->pagewrite;
427 if (mp->pgout)
428 (mp->pgout)(mp->pgcookie, bp->pgno, bp->page);
430 off = mp->pagesize * bp->pgno;
431 if (off / mp->pagesize != bp->pgno) {
438 if (pwrite(mp->fd, bp->page, (size_t)mp->pagesize, off) !=
439 (ssize_t)mp->pagesize)
448 if (mp->pgin)
449 (mp->pgin)(mp->pgcookie, bp->pgno, bp->page);
460 mpool_look(MPOOL *mp, pgno_t pgno)
465 head = &mp->hqh[HASHKEY(pgno)];
469 ++mp->cachehit;
474 ++mp->cachemiss;
485 mpool_stat(mp)
486 MPOOL *mp;
492 (void)fprintf(stderr, "%lu pages in the file\n", (u_long)mp->npages);
495 (u_long)mp->pagesize, (u_long)mp->curcache, (u_long)mp->maxcache);
497 mp->pageput, mp->pageget, mp->pagenew);
499 mp->pagealloc, mp->pageflush);
500 if (mp->cachehit + mp->cachemiss)
503 ((double)mp->cachehit / (mp->cachehit + mp->cachemiss))
504 * 100, mp->cachehit, mp->cachemiss);
506 mp->pageread, mp->pagewrite);
510 TAILQ_FOREACH(bp, &mp->lqh, q) {