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