mpool.c.patch   [plain text]


--- mpool.c.orig	2006-12-13 22:19:43.000000000 -0800
+++ mpool.c	2006-12-13 22:27:26.000000000 -0800
@@ -294,10 +294,16 @@
 	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);