Lines Matching refs:mp

62 	MPOOL *mp;
79 if ((mp = (MPOOL *)calloc(1, sizeof(MPOOL))) == NULL)
81 TAILQ_INIT(&mp->lqh);
83 TAILQ_INIT(&mp->hqh[entry]);
84 mp->maxcache = maxcache;
85 mp->npages = sb.st_size / pagesize;
86 mp->pagesize = pagesize;
87 mp->fd = fd;
88 return (mp);
96 mpool_filter(MPOOL *mp, void (*pgin) (void *, pgno_t, void *),
99 mp->pgin = pgin;
100 mp->pgout = pgout;
101 mp->pgcookie = pgcookie;
109 mpool_new(MPOOL *mp, pgno_t *pgnoaddr, u_int flags)
114 if (mp->npages == MAX_PAGE_NUMBER) {
119 ++mp->pagenew;
126 if ((bp = mpool_bkt(mp)) == NULL)
129 mp->npages++;
132 bp->pgno = *pgnoaddr = mp->npages++;
136 head = &mp->hqh[HASHKEY(bp->pgno)];
138 TAILQ_INSERT_TAIL(&mp->lqh, bp, q);
143 mpool_delete(MPOOL *mp, void *page)
159 head = &mp->hqh[HASHKEY(bp->pgno)];
161 TAILQ_REMOVE(&mp->lqh, bp, q);
164 mp->curcache--;
174 mpool_get(MPOOL *mp, pgno_t pgno,
183 ++mp->pageget;
187 if ((bp = mpool_look(mp, pgno)) != NULL) {
199 head = &mp->hqh[HASHKEY(bp->pgno)];
202 TAILQ_REMOVE(&mp->lqh, bp, q);
203 TAILQ_INSERT_TAIL(&mp->lqh, bp, q);
211 if ((bp = mpool_bkt(mp)) == NULL)
215 off = mp->pagesize * pgno;
216 if ((nr = pread(mp->fd, bp->page, mp->pagesize, off)) != (ssize_t)mp->pagesize) {
221 mp->curcache--;
228 memset(bp->page, 0, mp->pagesize);
233 mp->curcache--;
239 ++mp->pageread;
252 head = &mp->hqh[HASHKEY(bp->pgno)];
254 TAILQ_INSERT_TAIL(&mp->lqh, bp, q);
257 if (mp->pgin != NULL)
258 (mp->pgin)(mp->pgcookie, bp->pgno, bp->page);
269 mpool_put(MPOOL *mp, void *page, u_int flags)
274 ++mp->pageput;
295 mpool_close(MPOOL *mp)
300 while (!TAILQ_EMPTY(&mp->lqh)) {
301 bp = TAILQ_FIRST(&mp->lqh);
302 TAILQ_REMOVE(&mp->lqh, bp, q);
307 free(mp);
316 mpool_sync(MPOOL *mp)
321 TAILQ_FOREACH(bp, &mp->lqh, q)
323 mpool_write(mp, bp) == RET_ERROR)
327 return (_fsync(mp->fd) ? RET_ERROR : RET_SUCCESS);
335 mpool_bkt(MPOOL *mp)
341 if (mp->curcache < mp->maxcache)
350 TAILQ_FOREACH(bp, &mp->lqh, q)
354 mpool_write(mp, bp) == RET_ERROR)
357 ++mp->pageflush;
360 head = &mp->hqh[HASHKEY(bp->pgno)];
362 TAILQ_REMOVE(&mp->lqh, bp, q);
366 memset(bp, 0xff, sizeof(BKT) + mp->pagesize);
374 new: if ((bp = (BKT *)calloc(1, sizeof(BKT) + mp->pagesize)) == NULL)
377 ++mp->pagealloc;
381 ++mp->curcache;
390 mpool_write(MPOOL *mp, BKT *bp)
395 ++mp->pagewrite;
399 if (mp->pgout)
400 (mp->pgout)(mp->pgcookie, bp->pgno, bp->page);
402 off = mp->pagesize * bp->pgno;
403 if (pwrite(mp->fd, bp->page, mp->pagesize, off) != (ssize_t)mp->pagesize)
412 if (mp->pgin)
413 (mp->pgin)(mp->pgcookie, bp->pgno, bp->page);
424 mpool_look(MPOOL *mp, pgno_t pgno)
429 head = &mp->hqh[HASHKEY(pgno)];
434 ++mp->cachehit;
439 ++mp->cachemiss;
450 mpool_stat(MPOOL *mp)
456 (void)fprintf(stderr, "%lu pages in the file\n", mp->npages);
459 mp->pagesize, mp->curcache, mp->maxcache);
461 mp->pageput, mp->pageget, mp->pagenew);
463 mp->pagealloc, mp->pageflush);
464 if (mp->cachehit + mp->cachemiss)
467 ((double)mp->cachehit / (mp->cachehit + mp->cachemiss))
468 * 100, mp->cachehit, mp->cachemiss);
470 mp->pageread, mp->pagewrite);
474 TAILQ_FOREACH(bp, &mp->lqh, q) {