From c557e7fa115797d97c772199d6bd329312a75ddf Mon Sep 17 00:00:00 2001
From: Andres Freund <andres@anarazel.de>
Date: Fri, 10 Dec 2021 20:40:28 -0800
Subject: [PATCH v4 3/6] heap pruning: Only call BufferGetBlockNumber() once.

BufferGetBlockNumber() is not that cheap and obviously cannot change during
one heap_prune_page(), so only call it once. We might be able to do better and
pass the block number from the caller, but that'd be a larger change...
---
 src/backend/access/heap/pruneheap.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/backend/access/heap/pruneheap.c b/src/backend/access/heap/pruneheap.c
index 6557d710262..0fdc50e0599 100644
--- a/src/backend/access/heap/pruneheap.c
+++ b/src/backend/access/heap/pruneheap.c
@@ -270,6 +270,7 @@ heap_page_prune(Relation relation, Buffer buffer,
 {
 	int			ndeleted = 0;
 	Page		page = BufferGetPage(buffer);
+	BlockNumber blockno = BufferGetBlockNumber(buffer);
 	OffsetNumber offnum,
 				maxoff;
 	PruneState	prstate;
@@ -337,7 +338,7 @@ heap_page_prune(Relation relation, Buffer buffer,
 		htup = (HeapTupleHeader) PageGetItem(page, itemid);
 		tup.t_data = htup;
 		tup.t_len = ItemIdGetLength(itemid);
-		ItemPointerSet(&(tup.t_self), BufferGetBlockNumber(buffer), offnum);
+		ItemPointerSet(&(tup.t_self), blockno, offnum);
 
 		/*
 		 * Set the offset number so that we can display it along with any
-- 
2.34.0

