diff --git a/src/backend/access/gin/ginbtree.c b/src/backend/access/gin/ginbtree.c
index 8d08b05f51..8960f2bbf2 100644
--- a/src/backend/access/gin/ginbtree.c
+++ b/src/backend/access/gin/ginbtree.c
@@ -22,6 +22,8 @@
 #include "utils/memutils.h"
 #include "utils/rel.h"
 
+#include "access/gin_trace.h"
+
 static void ginFindParents(GinBtree btree, GinBtreeStack *stack);
 static bool ginPlaceToPage(GinBtree btree, GinBtreeStack *stack,
 						   void *insertdata, BlockNumber updateblkno,
diff --git a/src/backend/access/gin/ginfast.c b/src/backend/access/gin/ginfast.c
index 2e41b34d8d..830c01ec04 100644
--- a/src/backend/access/gin/ginfast.c
+++ b/src/backend/access/gin/ginfast.c
@@ -35,6 +35,8 @@
 #include "utils/memutils.h"
 #include "utils/rel.h"
 
+#include "access/gin_trace.h"
+
 /* GUC parameter */
 int			gin_pending_list_limit = 0;
 
diff --git a/src/backend/access/gin/ginget.c b/src/backend/access/gin/ginget.c
index 2cfccdedcf..a1430a3b08 100644
--- a/src/backend/access/gin/ginget.c
+++ b/src/backend/access/gin/ginget.c
@@ -22,6 +22,8 @@
 #include "utils/memutils.h"
 #include "utils/rel.h"
 
+#include "access/gin_trace.h"
+
 /* GUC parameter */
 int			GinFuzzySearchLimit = 0;
 
diff --git a/src/backend/access/gin/ginutil.c b/src/backend/access/gin/ginutil.c
index a400f1fedb..51d5673d9a 100644
--- a/src/backend/access/gin/ginutil.c
+++ b/src/backend/access/gin/ginutil.c
@@ -29,6 +29,7 @@
 #include "utils/index_selfuncs.h"
 #include "utils/typcache.h"
 
+#include "access/gin_trace.h"
 
 /*
  * GIN handler function: return IndexAmRoutine with access method parameters
diff --git a/src/include/access/gin_trace.h b/src/include/access/gin_trace.h
new file mode 100644
index 0000000000..d858d5889f
--- /dev/null
+++ b/src/include/access/gin_trace.h
@@ -0,0 +1,16 @@
+
+static inline Buffer
+GinReadBuffer(Relation reln, BlockNumber blockNum,
+			  const char *filename, int lineno, const char *funcname)
+{
+	if (reln->rd_rel->relam == GIN_AM_OID)
+	{
+		elog(LOG, "ReadBuffer %u/%u/%u read gin blk %u (%s:%d %s)",
+			 (reln)->rd_node.spcNode, (reln)->rd_node.dbNode, (reln)->rd_node.relNode, blockNum,
+			 filename, lineno, funcname);
+	}
+	return ReadBuffer(reln, blockNum);
+}
+
+#define ReadBuffer(reln, blockNum) \
+	GinReadBuffer(reln, blockNum, __FILE__, __LINE__, PG_FUNCNAME_MACRO)