15 #ifndef BUFMGR_INTERNALS_H
16 #define BUFMGR_INTERNALS_H
42 #define BUF_REFCOUNT_ONE 1
43 #define BUF_REFCOUNT_MASK ((1U << 18) - 1)
44 #define BUF_USAGECOUNT_MASK 0x003C0000U
45 #define BUF_USAGECOUNT_ONE (1U << 18)
46 #define BUF_USAGECOUNT_SHIFT 18
47 #define BUF_FLAG_MASK 0xFFC00000U
50 #define BUF_STATE_GET_REFCOUNT(state) ((state) & BUF_REFCOUNT_MASK)
51 #define BUF_STATE_GET_USAGECOUNT(state) (((state) & BUF_USAGECOUNT_MASK) >> BUF_USAGECOUNT_SHIFT)
59 #define BM_LOCKED (1U << 22)
60 #define BM_DIRTY (1U << 23)
61 #define BM_VALID (1U << 24)
62 #define BM_TAG_VALID (1U << 25)
63 #define BM_IO_IN_PROGRESS (1U << 26)
64 #define BM_IO_ERROR (1U << 27)
65 #define BM_JUST_DIRTIED (1U << 28)
66 #define BM_PIN_COUNT_WAITER (1U << 29)
67 #define BM_CHECKPOINT_NEEDED (1U << 30)
68 #define BM_PERMANENT (1U << 31)
78 #define BM_MAX_USAGE_COUNT 5
277 #define BUFFERDESC_PAD_TO_SIZE (SIZEOF_VOID_P == 8 ? 64 : 1)
351 #define FREENEXT_END_OF_LIST (-1)
352 #define FREENEXT_NOT_IN_LIST (-2)
398 uint32 *buf_state,
bool *from_ring);
#define pg_write_barrier()
static void pg_atomic_write_u32(volatile pg_atomic_uint32 *ptr, uint32 val)
#define InvalidBlockNumber
BlockNumber ExtendBufferedRelLocal(ExtendBufferedWhat eb, ForkNumber fork, uint32 flags, uint32 extend_by, BlockNumber extend_upto, Buffer *buffers, uint32 *extended_by)
static void InitBufferTag(BufferTag *tag, const RelFileLocator *rlocator, ForkNumber forkNum, BlockNumber blockNum)
struct CkptSortItem CkptSortItem
static uint32 BufTableHashPartition(uint32 hashcode)
void BufTableDelete(BufferTag *tagPtr, uint32 hashcode)
union BufferDescPadded BufferDescPadded
void UnpinLocalBuffer(Buffer buffer)
int StrategySyncStart(uint32 *complete_passes, uint32 *num_buf_alloc)
static ForkNumber BufTagGetForkNum(const BufferTag *tag)
BufferDesc * LocalBufferAlloc(SMgrRelation smgr, ForkNumber forkNum, BlockNumber blockNum, bool *foundPtr)
struct BufferDesc BufferDesc
void AtEOXact_LocalBuffers(bool isCommit)
static BufferDesc * GetLocalBufferDescriptor(uint32 id)
static BufferDesc * GetBufferDescriptor(uint32 id)
static void UnlockBufHdr(BufferDesc *desc, uint32 buf_state)
bool have_free_buffer(void)
void DropRelationLocalBuffers(RelFileLocator rlocator, ForkNumber forkNum, BlockNumber firstDelBlock)
int BufTableLookup(BufferTag *tagPtr, uint32 hashcode)
static bool BufferTagsEqual(const BufferTag *tag1, const BufferTag *tag2)
static RelFileNumber BufTagGetRelNumber(const BufferTag *tag)
static bool BufTagMatchesRelFileLocator(const BufferTag *tag, const RelFileLocator *rlocator)
struct WritebackContext WritebackContext
bool PinLocalBuffer(BufferDesc *buf_hdr, bool adjust_usagecount)
struct PendingWriteback PendingWriteback
static void BufTagSetRelForkDetails(BufferTag *tag, RelFileNumber relnumber, ForkNumber forknum)
static LWLock * BufMappingPartitionLockByIndex(uint32 index)
void InitBufTable(int size)
static LWLock * BufMappingPartitionLock(uint32 hashcode)
void StrategyInitialize(bool init)
void MarkLocalBufferDirty(Buffer buffer)
BufferDesc * StrategyGetBuffer(BufferAccessStrategy strategy, uint32 *buf_state, bool *from_ring)
#define BUFFERDESC_PAD_TO_SIZE
PGDLLIMPORT WritebackContext BackendWritebackContext
Size BufTableShmemSize(int size)
uint32 BufTableHashCode(BufferTag *tagPtr)
void DropRelationAllLocalBuffers(RelFileLocator rlocator)
void ScheduleBufferTagForWriteback(WritebackContext *wb_context, IOContext io_context, BufferTag *tag)
int BufTableInsert(BufferTag *tagPtr, uint32 hashcode, int buf_id)
static void ClearBufferTag(BufferTag *tag)
void WritebackContextInit(WritebackContext *context, int *max_pending)
void StrategyNotifyBgWriter(int bgwprocno)
static ConditionVariable * BufferDescriptorGetIOCV(const BufferDesc *bdesc)
PGDLLIMPORT BufferDescPadded * BufferDescriptors
PrefetchBufferResult PrefetchLocalBuffer(SMgrRelation smgr, ForkNumber forkNum, BlockNumber blockNum)
PGDLLIMPORT ConditionVariableMinimallyPadded * BufferIOCVArray
void IssuePendingWritebacks(WritebackContext *wb_context, IOContext io_context)
PGDLLIMPORT CkptSortItem * CkptBufferIds
IOContext IOContextForStrategy(BufferAccessStrategy strategy)
static RelFileLocator BufTagGetRelFileLocator(const BufferTag *tag)
Size StrategyShmemSize(void)
PGDLLIMPORT BufferDesc * LocalBufferDescriptors
uint32 LockBufHdr(BufferDesc *desc)
void StrategyFreeBuffer(BufferDesc *buf)
bool StrategyRejectBuffer(BufferAccessStrategy strategy, BufferDesc *buf, bool from_ring)
static Buffer BufferDescriptorGetBuffer(const BufferDesc *bdesc)
static LWLock * BufferDescriptorGetContentLock(const BufferDesc *bdesc)
LWLockPadded * MainLWLockArray
#define BUFFER_MAPPING_LWLOCK_OFFSET
#define NUM_BUFFER_PARTITIONS
#define WRITEBACK_MAX_PENDING_FLUSHES
#define InvalidRelFileNumber
int wait_backend_pgprocno
PendingWriteback pending_writebacks[WRITEBACK_MAX_PENDING_FLUSHES]
char pad[BUFFERDESC_PAD_TO_SIZE]