From 9ae90aed9b1df0fb8ac044a715aacc917a05482a Mon Sep 17 00:00:00 2001
From: Andrey Rachitskiy <pl0h0yp1@gmail.com>
Date: Wed, 29 Jul 2026 12:32:49 +0500
Subject: [PATCH] Fix SystemTap dtrace warning for smgr probe argument types

Commits ca326e903d and 1f8c504e308 widened the byte-count arguments of
smgr__md__read__done and smgr__md__write__done to "long long int".
SystemTap's dtrace(1) pyparsing grammar rejects that multi-word type and
falls back with a warning (misreported near the previous probe).  Use
ssize_t and size_t instead, matching the md.c call sites.  Revise the
probes.d note: avoid multi-word types for SystemTap, and drop the old
blanket ban on system typedefs that appears obsolete on current macOS.

Author: Andrey Rachitskiy <pl0h0yp1@gmail.com>
Reported-by: Laurenz Albe <laurenz.albe@cybertec.at>
Discussion: https://postgr.es/m/697d3c88568442cd637d8453d129f1bb14bbd2a8.camel@cybertec.at
---
 doc/src/sgml/monitoring.sgml |  4 ++--
 src/backend/utils/probes.d   | 12 ++++++++----
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/doc/src/sgml/monitoring.sgml b/doc/src/sgml/monitoring.sgml
index 074a821a68e..0c7107d400b 100644
--- a/doc/src/sgml/monitoring.sgml
+++ b/doc/src/sgml/monitoring.sgml
@@ -8595,7 +8595,7 @@ FROM pg_stat_get_backend_idset() AS backendid;
     </row>
     <row>
      <entry><literal>smgr-md-read-done</literal></entry>
-     <entry><literal>(ForkNumber, BlockNumber, Oid, Oid, Oid, int, int, int)</literal></entry>
+     <entry><literal>(ForkNumber, BlockNumber, Oid, Oid, Oid, int, ssize_t, size_t)</literal></entry>
      <entry>Probe that fires when a block read is complete.
       arg0 and arg1 contain the fork and block numbers of the page.
       arg2, arg3, and arg4 contain the tablespace, database, and relation OIDs
@@ -8617,7 +8617,7 @@ FROM pg_stat_get_backend_idset() AS backendid;
     </row>
     <row>
      <entry><literal>smgr-md-write-done</literal></entry>
-     <entry><literal>(ForkNumber, BlockNumber, Oid, Oid, Oid, int, int, int)</literal></entry>
+     <entry><literal>(ForkNumber, BlockNumber, Oid, Oid, Oid, int, ssize_t, size_t)</literal></entry>
      <entry>Probe that fires when a block write is complete.
       arg0 and arg1 contain the fork and block numbers of the page.
       arg2, arg3, and arg4 contain the tablespace, database, and relation OIDs
diff --git a/src/backend/utils/probes.d b/src/backend/utils/probes.d
index 2d8f12cbe30..c69803db438 100644
--- a/src/backend/utils/probes.d
+++ b/src/backend/utils/probes.d
@@ -11,8 +11,12 @@
 /*
  * Typedefs used in PostgreSQL probes.
  *
- * NOTE: Do not use system-provided typedefs (e.g. uintptr_t, uint32_t, etc)
- * in probe definitions, as they cause compilation errors on macOS.
+ * NOTE: Avoid multi-word C types such as "long long" / "long long int" in
+ * probe definitions; SystemTap's dtrace(1) pyparsing grammar rejects them
+ * and falls back with a warning.  Prefer single-token types, including
+ * system typedefs such as ssize_t and size_t when those match the C
+ * call sites.  (An older restriction against all system typedefs on
+ * macOS appears obsolete on current releases.)
  */
 #define LocalTransactionId unsigned int
 #define LWLockMode int
@@ -83,9 +87,9 @@ provider postgresql {
 	probe twophase__checkpoint__done();
 
 	probe smgr__md__read__start(ForkNumber, BlockNumber, Oid, Oid, Oid, int);
-	probe smgr__md__read__done(ForkNumber, BlockNumber, Oid, Oid, Oid, int, long long int, long long int);
+	probe smgr__md__read__done(ForkNumber, BlockNumber, Oid, Oid, Oid, int, ssize_t, size_t);
 	probe smgr__md__write__start(ForkNumber, BlockNumber, Oid, Oid, Oid, int);
-	probe smgr__md__write__done(ForkNumber, BlockNumber, Oid, Oid, Oid, int, long long int, long long int);
+	probe smgr__md__write__done(ForkNumber, BlockNumber, Oid, Oid, Oid, int, ssize_t, size_t);
 
 	probe wal__insert(unsigned char, unsigned char);
 	probe wal__switch();
-- 
2.53.0

