diff --git a/src/include/storage/bufmgr.h b/src/include/storage/bufmgr.h index d7ced19c14..f7fc60815a 100644 --- a/src/include/storage/bufmgr.h +++ b/src/include/storage/bufmgr.h @@ -98,7 +98,7 @@ extern PGDLLIMPORT int32 *LocalRefCount; #define BUFFER_LOCK_EXCLUSIVE 2 /* - * These routines are beaten on quite heavily, hence the macroization. + * These routines are beaten on quite heavily, hence inline. */ /* @@ -120,11 +120,14 @@ extern PGDLLIMPORT int32 *LocalRefCount; * even in non-assert-enabled builds can be significant. Thus, we've * now demoted the range checks to assertions within the macro itself. */ -#define BufferIsValid(bufnum) \ -( \ - AssertMacro((bufnum) <= NBuffers && (bufnum) >= -NLocBuffer), \ - (bufnum) != InvalidBuffer \ -) +static inline bool +BufferIsValid(Buffer bufnum) +{ + Assert(bufnum <= NBuffers); + Assert(bufnum >= -NLocBuffer); + + return bufnum != InvalidBuffer; +} /* * BufferGetBlock @@ -133,14 +136,16 @@ extern PGDLLIMPORT int32 *LocalRefCount; * Note: * Assumes buffer is valid. */ -#define BufferGetBlock(buffer) \ -( \ - AssertMacro(BufferIsValid(buffer)), \ - BufferIsLocal(buffer) ? \ - LocalBufferBlockPointers[-(buffer) - 1] \ - : \ - (Block) (BufferBlocks + ((Size) ((buffer) - 1)) * BLCKSZ) \ -) +static inline Block +BufferGetBlock(Buffer buffer) +{ + Assert(BufferIsValid(buffer)); + + if (BufferIsLocal(buffer)) + return LocalBufferBlockPointers[-buffer - 1]; + else + return (Block) (BufferBlocks + ((Size) (buffer - 1)) * BLCKSZ); +} /* * BufferGetPageSize @@ -153,11 +158,12 @@ extern PGDLLIMPORT int32 *LocalRefCount; * (formatted) disk page. */ /* XXX should dig out of buffer descriptor */ -#define BufferGetPageSize(buffer) \ -( \ - AssertMacro(BufferIsValid(buffer)), \ - (Size)BLCKSZ \ -) +static inline Size +BufferGetPageSize(Buffer buffer) +{ + AssertMacro(BufferIsValid(buffer)); + return (Size) BLCKSZ; +} /* * BufferGetPage @@ -166,7 +172,11 @@ extern PGDLLIMPORT int32 *LocalRefCount; * When this is called as part of a scan, there may be a need for a nearby * call to TestForOldSnapshot(). See the definition of that for details. */ -#define BufferGetPage(buffer) ((Page)BufferGetBlock(buffer)) +static inline Page +BufferGetPage(Buffer buffer) +{ + return (Page) BufferGetBlock(buffer); +} /* * prototypes for functions in bufmgr.c @@ -201,6 +211,12 @@ extern void CheckPointBuffers(int flags); extern BlockNumber BufferGetBlockNumber(Buffer buffer); extern BlockNumber RelationGetNumberOfBlocksInFork(Relation relation, ForkNumber forkNum); +static inline BlockNumber +RelationGetNumberOfBlocks(Relation reln) +{ + return RelationGetNumberOfBlocksInFork(reln, MAIN_FORKNUM); +} + extern void FlushOneBuffer(Buffer buffer); extern void FlushRelationBuffers(Relation rel); extern void FlushRelationsAllBuffers(struct SMgrRelationData **smgrs, int nrels); @@ -215,9 +231,6 @@ extern void DropRelationsAllBuffers(struct SMgrRelationData **smgr_reln, int nlocators); extern void DropDatabaseBuffers(Oid dbid); -#define RelationGetNumberOfBlocks(reln) \ - RelationGetNumberOfBlocksInFork(reln, MAIN_FORKNUM) - extern bool BufferIsPermanent(Buffer buffer); extern XLogRecPtr BufferGetLSNAtomic(Buffer buffer);