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