From cde77c8ddaf2b57c39f23f2a5c1431c970e3851c Mon Sep 17 00:00:00 2001
From: Maxim Orlov <orlovmg@gmail.com>
Date: Wed, 25 Feb 2026 18:20:01 +0300
Subject: [PATCH v2 4/5] Use custom SLRU IO error msg for multixact

---
 src/backend/access/transam/multixact.c | 24 ++++++++++++++++++++----
 1 file changed, 20 insertions(+), 4 deletions(-)

diff --git a/src/backend/access/transam/multixact.c b/src/backend/access/transam/multixact.c
index 63d5256823e..34daacae82b 100644
--- a/src/backend/access/transam/multixact.c
+++ b/src/backend/access/transam/multixact.c
@@ -881,7 +881,8 @@ RecordNewMultiXact(MultiXactId multi, MultiXactOffset offset,
 				LWLockAcquire(lock, LW_EXCLUSIVE);
 				prevlock = lock;
 			}
-			slotno = SimpleLruReadPage(MultiXactMemberCtl, pageno, true, &multi);
+			slotno = SimpleLruReadPage(MultiXactMemberCtl, pageno, true,
+									   &offset);
 			prev_pageno = pageno;
 		}
 
@@ -1309,7 +1310,8 @@ GetMultiXactIdMembers(MultiXactId multi, MultiXactMember **members,
 				lock = newlock;
 			}
 
-			slotno = SimpleLruReadPage(MultiXactMemberCtl, pageno, true, &multi);
+			slotno = SimpleLruReadPage(MultiXactMemberCtl, pageno, true,
+									   &offset);
 			prev_pageno = pageno;
 		}
 
@@ -1720,6 +1722,20 @@ MultiXactShmemSize(void)
 	return size;
 }
 
+static inline char *
+MultiXactOffsetIoErrorMsg(const void *opaque_data)
+{
+	return psprintf("could not access status of multixact offset %u",
+					*(MultiXactId *) opaque_data);
+}
+
+static inline char *
+MultiXactMemberIoErrorMsg(const void *opaque_data)
+{
+	return psprintf("could not access status of multixact member %" PRIu64,
+					*(MultiXactOffset *) opaque_data);
+}
+
 void
 MultiXactShmemInit(void)
 {
@@ -1730,8 +1746,8 @@ MultiXactShmemInit(void)
 	MultiXactOffsetCtl->PagePrecedes = MultiXactOffsetPagePrecedes;
 	MultiXactMemberCtl->PagePrecedes = MultiXactMemberPagePrecedes;
 
-	MultiXactOffsetCtl->IoErrorMsg = TransactionIdIoErrorMsg;
-	MultiXactMemberCtl->IoErrorMsg = TransactionIdIoErrorMsg;
+	MultiXactOffsetCtl->IoErrorMsg = MultiXactOffsetIoErrorMsg;
+	MultiXactMemberCtl->IoErrorMsg = MultiXactMemberIoErrorMsg;
 
 	SimpleLruInit(MultiXactOffsetCtl,
 				  "multixact_offset", multixact_offset_buffers, 0,
-- 
2.50.1 (Apple Git-155)

