diff --git a/src/backend/access/transam/xlogutils.c b/src/backend/access/transam/xlogutils.c
index 59f4233..958bcaa 100644
--- a/src/backend/access/transam/xlogutils.c
+++ b/src/backend/access/transam/xlogutils.c
@@ -296,6 +296,19 @@ XLogReadBufferExtended(RelFileNode rnode, ForkNumber forknum,
 	BlockNumber lastblock;
 	Buffer		buffer;
 	SMgrRelation smgr;
+	bool		zero_page_allowed;
+
+	if (mode == RBM_NORMAL_ZERO_OK)
+	{
+		/*
+		 * Treat RBM_NORMAL_ZERO_OK just like RBM_NORMAL, except for the
+		 * PageIsNew() check at the end.
+		 */
+		mode = RBM_NORMAL;
+		zero_page_allowed = true;
+	}
+	else
+		zero_page_allowed = false;
 
 	Assert(blkno != P_NEW);
 
@@ -343,7 +356,7 @@ XLogReadBufferExtended(RelFileNode rnode, ForkNumber forknum,
 		Assert(BufferGetBlockNumber(buffer) == blkno);
 	}
 
-	if (mode == RBM_NORMAL)
+	if (mode == RBM_NORMAL && !zero_page_allowed)
 	{
 		/* check that page has been initialized */
 		Page		page = (Page) BufferGetPage(buffer);
