--- mpool.c.orig 2008-09-07 11:37:54.000000000 -0700 +++ mpool.c 2008-09-07 12:46:41.000000000 -0700 @@ -128,7 +128,7 @@ mpool_new(mp, pgnoaddr) if (mp->npages == MAX_PAGE_NUMBER) { (void)fprintf(stderr, "mpool_new: page allocation overflow.\n"); - abort(); + LIBC_ABORT("page allocation overflow"); } #ifdef STATISTICS ++mp->pagenew; @@ -180,7 +180,7 @@ mpool_get(mp, pgno, flags) if (bp->flags & MPOOL_PINNED) { (void)fprintf(stderr, "mpool_get: page %d already pinned\n", bp->pgno); - abort(); + LIBC_ABORT("page %d already pinned", bp->pgno); } #endif /* @@ -253,7 +253,7 @@ mpool_put(mp, page, flags) if (!(bp->flags & MPOOL_PINNED)) { (void)fprintf(stderr, "mpool_put: page %d not pinned\n", bp->pgno); - abort(); + LIBC_ABORT("page %d not pinned", bp->pgno); } #endif bp->flags &= ~MPOOL_PINNED; @@ -294,10 +294,16 @@ mpool_sync(mp) BKT *bp; /* Walk the lru chain, flushing any dirty pages to disk. */ - TAILQ_FOREACH(bp, &mp->lqh, q) - if (bp->flags & MPOOL_DIRTY && - mpool_write(mp, bp) == RET_ERROR) - return (RET_ERROR); + TAILQ_FOREACH(bp, &mp->lqh, q) { + if (bp->flags & MPOOL_DIRTY) + if (mpool_write(mp, bp) == RET_ERROR) { + return (RET_ERROR); + } else { + /* 4874757: Re-run through the user's pgin filter. */ + if (mp->pgin != NULL) + (mp->pgin)(mp->pgcookie, bp->pgno, bp->page); + } + } /* Sync the file descriptor. */ return (_fsync(mp->fd) ? RET_ERROR : RET_SUCCESS);