Lines Matching refs:mp
65 MPOOL *mp; in mpool_open() local
82 if ((mp = (MPOOL *)calloc(1, sizeof(MPOOL))) == NULL) in mpool_open()
84 TAILQ_INIT(&mp->lqh); in mpool_open()
86 TAILQ_INIT(&mp->hqh[entry]); in mpool_open()
87 mp->maxcache = maxcache; in mpool_open()
88 mp->npages = sb.st_size / pagesize; in mpool_open()
89 mp->pagesize = pagesize; in mpool_open()
90 mp->fd = fd; in mpool_open()
91 return (mp); in mpool_open()
99 mpool_filter(MPOOL *mp, void (*pgin) (void *, pgno_t, void *), in mpool_filter() argument
102 mp->pgin = pgin; in mpool_filter()
103 mp->pgout = pgout; in mpool_filter()
104 mp->pgcookie = pgcookie; in mpool_filter()
112 mpool_new(MPOOL *mp, pgno_t *pgnoaddr, u_int flags) in mpool_new() argument
117 if (mp->npages == MAX_PAGE_NUMBER) { in mpool_new()
122 ++mp->pagenew; in mpool_new()
129 if ((bp = mpool_bkt(mp)) == NULL) in mpool_new()
132 mp->npages++; in mpool_new()
135 bp->pgno = *pgnoaddr = mp->npages++; in mpool_new()
139 head = &mp->hqh[HASHKEY(bp->pgno)]; in mpool_new()
141 TAILQ_INSERT_TAIL(&mp->lqh, bp, q); in mpool_new()
146 mpool_delete(MPOOL *mp, void *page) in mpool_delete() argument
162 head = &mp->hqh[HASHKEY(bp->pgno)]; in mpool_delete()
164 TAILQ_REMOVE(&mp->lqh, bp, q); in mpool_delete()
167 mp->curcache--; in mpool_delete()
177 mpool_get(MPOOL *mp, pgno_t pgno, in mpool_get() argument
186 ++mp->pageget; in mpool_get()
190 if ((bp = mpool_look(mp, pgno)) != NULL) { in mpool_get()
202 head = &mp->hqh[HASHKEY(bp->pgno)]; in mpool_get()
205 TAILQ_REMOVE(&mp->lqh, bp, q); in mpool_get()
206 TAILQ_INSERT_TAIL(&mp->lqh, bp, q); in mpool_get()
214 if ((bp = mpool_bkt(mp)) == NULL) in mpool_get()
218 off = mp->pagesize * pgno; in mpool_get()
219 if ((nr = pread(mp->fd, bp->page, mp->pagesize, off)) != (ssize_t)mp->pagesize) { in mpool_get()
224 mp->curcache--; in mpool_get()
231 memset(bp->page, 0, mp->pagesize); in mpool_get()
236 mp->curcache--; in mpool_get()
242 ++mp->pageread; in mpool_get()
255 head = &mp->hqh[HASHKEY(bp->pgno)]; in mpool_get()
257 TAILQ_INSERT_TAIL(&mp->lqh, bp, q); in mpool_get()
260 if (mp->pgin != NULL) in mpool_get()
261 (mp->pgin)(mp->pgcookie, bp->pgno, bp->page); in mpool_get()
272 mpool_put(MPOOL *mp, void *page, u_int flags) in mpool_put() argument
277 ++mp->pageput; in mpool_put()
298 mpool_close(MPOOL *mp) in mpool_close() argument
303 while (!TAILQ_EMPTY(&mp->lqh)) { in mpool_close()
304 bp = TAILQ_FIRST(&mp->lqh); in mpool_close()
305 TAILQ_REMOVE(&mp->lqh, bp, q); in mpool_close()
310 free(mp); in mpool_close()
319 mpool_sync(MPOOL *mp) in mpool_sync() argument
324 TAILQ_FOREACH(bp, &mp->lqh, q) in mpool_sync()
326 mpool_write(mp, bp) == RET_ERROR) in mpool_sync()
330 return (_fsync(mp->fd) ? RET_ERROR : RET_SUCCESS); in mpool_sync()
338 mpool_bkt(MPOOL *mp) in mpool_bkt() argument
344 if (mp->curcache < mp->maxcache) in mpool_bkt()
353 TAILQ_FOREACH(bp, &mp->lqh, q) in mpool_bkt()
357 mpool_write(mp, bp) == RET_ERROR) in mpool_bkt()
360 ++mp->pageflush; in mpool_bkt()
363 head = &mp->hqh[HASHKEY(bp->pgno)]; in mpool_bkt()
365 TAILQ_REMOVE(&mp->lqh, bp, q); in mpool_bkt()
369 memset(bp, 0xff, sizeof(BKT) + mp->pagesize); in mpool_bkt()
377 new: if ((bp = (BKT *)calloc(1, sizeof(BKT) + mp->pagesize)) == NULL) in mpool_bkt()
380 ++mp->pagealloc; in mpool_bkt()
384 ++mp->curcache; in mpool_bkt()
393 mpool_write(MPOOL *mp, BKT *bp) in mpool_write() argument
398 ++mp->pagewrite; in mpool_write()
402 if (mp->pgout) in mpool_write()
403 (mp->pgout)(mp->pgcookie, bp->pgno, bp->page); in mpool_write()
405 off = mp->pagesize * bp->pgno; in mpool_write()
406 if (pwrite(mp->fd, bp->page, mp->pagesize, off) != (ssize_t)mp->pagesize) in mpool_write()
415 if (mp->pgin) in mpool_write()
416 (mp->pgin)(mp->pgcookie, bp->pgno, bp->page); in mpool_write()
427 mpool_look(MPOOL *mp, pgno_t pgno) in mpool_look() argument
432 head = &mp->hqh[HASHKEY(pgno)]; in mpool_look()
437 ++mp->cachehit; in mpool_look()
442 ++mp->cachemiss; in mpool_look()
453 mpool_stat(MPOOL *mp) in mpool_stat() argument
459 (void)fprintf(stderr, "%lu pages in the file\n", mp->npages); in mpool_stat()
462 mp->pagesize, mp->curcache, mp->maxcache); in mpool_stat()
464 mp->pageput, mp->pageget, mp->pagenew); in mpool_stat()
466 mp->pagealloc, mp->pageflush); in mpool_stat()
467 if (mp->cachehit + mp->cachemiss) in mpool_stat()
470 ((double)mp->cachehit / (mp->cachehit + mp->cachemiss)) in mpool_stat()
471 * 100, mp->cachehit, mp->cachemiss); in mpool_stat()
473 mp->pageread, mp->pagewrite); in mpool_stat()
477 TAILQ_FOREACH(bp, &mp->lqh, q) { in mpool_stat()