PostgreSQL Source Code git master
Loading...
Searching...
No Matches
bufmgr.h
Go to the documentation of this file.
1/*-------------------------------------------------------------------------
2 *
3 * bufmgr.h
4 * POSTGRES buffer manager definitions.
5 *
6 *
7 * Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
8 * Portions Copyright (c) 1994, Regents of the University of California
9 *
10 * src/include/storage/bufmgr.h
11 *
12 *-------------------------------------------------------------------------
13 */
14#ifndef BUFMGR_H
15#define BUFMGR_H
16
17#include "port/pg_iovec.h"
18#include "storage/aio_types.h"
19#include "storage/block.h"
20#include "storage/buf.h"
21#include "storage/bufpage.h"
23#include "utils/relcache.h"
24#include "utils/snapmgr.h"
25
26typedef void *Block;
27
28/*
29 * Possible arguments for GetAccessStrategy().
30 *
31 * If adding a new BufferAccessStrategyType, also add a new IOContext so
32 * IO statistics using this strategy are tracked.
33 */
35{
36 BAS_NORMAL, /* Normal random access */
37 BAS_BULKREAD, /* Large read-only scan (hint bit updates are
38 * ok) */
39 BAS_BULKWRITE, /* Large multi-block write (e.g. COPY IN) */
40 BAS_VACUUM, /* VACUUM */
42
43/* Possible modes for ReadBufferExtended() */
44typedef enum
45{
46 RBM_NORMAL, /* Normal read */
47 RBM_ZERO_AND_LOCK, /* Don't read from disk, caller will
48 * initialize. Also locks the page. */
49 RBM_ZERO_AND_CLEANUP_LOCK, /* Like RBM_ZERO_AND_LOCK, but locks the page
50 * in "cleanup" mode */
51 RBM_ZERO_ON_ERROR, /* Read, but return an all-zeros page on error */
52 RBM_NORMAL_NO_LOG, /* Don't log page as invalid during WAL
53 * replay; otherwise same as RBM_NORMAL */
55
56/*
57 * Type returned by PrefetchBuffer().
58 */
60{
61 Buffer recent_buffer; /* If valid, a hit (recheck needed!) */
62 bool initiated_io; /* If true, a miss resulting in async I/O */
64
65/*
66 * Flags influencing the behaviour of ExtendBufferedRel*
67 */
69{
70 /*
71 * Don't acquire extension lock. This is safe only if the relation isn't
72 * shared, an access exclusive lock is held or if this is the startup
73 * process.
74 */
76
77 /* Is this extension part of recovery? */
79
80 /*
81 * Should the fork be created if it does not currently exist? This likely
82 * only ever makes sense for relation forks.
83 */
85
86 /* Should the first (possibly only) return buffer be returned locked? */
87 EB_LOCK_FIRST = (1 << 3),
88
89 /* Should the smgr size cache be cleared? */
91
92 /* internal flags follow */
93 EB_LOCK_TARGET = (1 << 5),
95
96/* forward declared, to avoid including smgr.h here */
98
99/*
100 * Some functions identify relations either by relation or smgr +
101 * relpersistence, initialized via the BMR_REL()/BMR_SMGR() macros below.
102 * This allows us to use the same function for both recovery and normal
103 * operation. When BMR_REL is used, it's not valid to cache its rd_smgr here,
104 * because our pointer would be obsolete in case of relcache invalidation.
105 * For simplicity, use BMR_GET_SMGR to read the smgr.
106 */
113
114#define BMR_REL(p_rel) \
115 ((BufferManagerRelation){.rel = p_rel})
116#define BMR_SMGR(p_smgr, p_relpersistence) \
117 ((BufferManagerRelation){.smgr = p_smgr, .relpersistence = p_relpersistence})
118#define BMR_GET_SMGR(bmr) \
119 (RelationIsValid((bmr).rel) ? RelationGetSmgr((bmr).rel) : (bmr).smgr)
120
121/* Zero out page if reading fails. */
122#define READ_BUFFERS_ZERO_ON_ERROR (1 << 0)
123/* Call smgrprefetch() if I/O necessary. */
124#define READ_BUFFERS_ISSUE_ADVICE (1 << 1)
125/* Don't treat page as invalid due to checksum failures. */
126#define READ_BUFFERS_IGNORE_CHECKSUM_FAILURES (1 << 2)
127/* IO will immediately be waited for */
128#define READ_BUFFERS_SYNCHRONOUSLY (1 << 3)
129
130
132{
133 /* The following members should be set by the caller. */
134 Relation rel; /* optional */
139
140 /*
141 * The following private members are private state for communication
142 * between StartReadBuffers() and WaitReadBuffers(), initialized only if
143 * an actual read is required, and should not be modified.
144 */
147 int flags;
152};
153
155
156/* to avoid having to expose buf_internals.h here */
158
159/* in globals.c ... this duplicates miscadmin.h */
160extern PGDLLIMPORT int NBuffers;
161
162/* in bufmgr.c */
166extern PGDLLIMPORT bool track_io_timing;
167
168#define DEFAULT_EFFECTIVE_IO_CONCURRENCY 16
169#define DEFAULT_MAINTENANCE_IO_CONCURRENCY 16
172
173#define MAX_IO_COMBINE_LIMIT PG_IOV_MAX
174#define DEFAULT_IO_COMBINE_LIMIT Min(MAX_IO_COMBINE_LIMIT, (128 * 1024) / BLCKSZ)
175extern PGDLLIMPORT int io_combine_limit; /* min of the two GUCs below */
178
182
185
186/* in buf_init.c */
187extern PGDLLIMPORT char *BufferBlocks;
188
189/* in localbuf.c */
190extern PGDLLIMPORT int NLocBuffer;
193
194/* upper limit for effective_io_concurrency */
195#define MAX_IO_CONCURRENCY 1000
196
197/* special block number for ReadBuffer() */
198#define P_NEW InvalidBlockNumber /* grow the file to get a new page */
199
200/*
201 * Buffer content lock modes (mode argument for LockBuffer())
202 */
203typedef enum BufferLockMode
204{
206
207 /*
208 * A share lock conflicts with exclusive locks.
209 */
211
212 /*
213 * A share-exclusive lock conflicts with itself and exclusive locks.
214 */
216
217 /*
218 * An exclusive lock conflicts with every other lock type.
219 */
222
223
224/*
225 * prototypes for functions in bufmgr.c
226 */
228 ForkNumber forkNum,
229 BlockNumber blockNum);
231 BlockNumber blockNum);
232extern bool ReadRecentBuffer(RelFileLocator rlocator, ForkNumber forkNum,
233 BlockNumber blockNum, Buffer recent_buffer);
234extern Buffer ReadBuffer(Relation reln, BlockNumber blockNum);
237 BufferAccessStrategy strategy);
239 ForkNumber forkNum, BlockNumber blockNum,
241 bool permanent);
242
243extern bool StartReadBuffer(ReadBuffersOperation *operation,
244 Buffer *buffer,
245 BlockNumber blocknum,
246 int flags);
247extern bool StartReadBuffers(ReadBuffersOperation *operation,
248 Buffer *buffers,
249 BlockNumber blockNum,
250 int *nblocks,
251 int flags);
252extern void WaitReadBuffers(ReadBuffersOperation *operation);
253
254extern void ReleaseBuffer(Buffer buffer);
255extern void UnlockReleaseBuffer(Buffer buffer);
256extern bool BufferIsLockedByMe(Buffer buffer);
258extern bool BufferIsDirty(Buffer buffer);
259extern void MarkBufferDirty(Buffer buffer);
260extern void IncrBufferRefCount(Buffer buffer);
261extern void CheckBufferIsPinnedOnce(Buffer buffer);
262extern Buffer ReleaseAndReadBuffer(Buffer buffer, Relation relation,
263 BlockNumber blockNum);
264
266 ForkNumber forkNum,
267 BufferAccessStrategy strategy,
268 uint32 flags);
271 BufferAccessStrategy strategy,
272 uint32 flags,
274 Buffer *buffers,
278 BufferAccessStrategy strategy,
279 uint32 flags,
282
283extern void InitBufferManagerAccess(void);
284extern void AtEOXact_Buffers(bool isCommit);
285#ifdef USE_ASSERT_CHECKING
286extern void AssertBufferLocksPermitCatalogRead(void);
287#endif
288extern char *DebugPrintBufferRefcount(Buffer buffer);
289extern void CheckPointBuffers(int flags);
292 ForkNumber forkNum);
293extern void FlushOneBuffer(Buffer buffer);
294extern void FlushRelationBuffers(Relation rel);
295extern void FlushRelationsAllBuffers(SMgrRelation *smgrs, int nrels);
298 bool permanent);
299extern void FlushDatabaseBuffers(Oid dbid);
301 ForkNumber *forkNum,
304 int nlocators);
305extern void DropDatabaseBuffers(Oid dbid);
306
307#define RelationGetNumberOfBlocks(reln) \
308 RelationGetNumberOfBlocksInFork(reln, MAIN_FORKNUM)
309
310extern bool BufferIsPermanent(Buffer buffer);
312extern void BufferGetTag(Buffer buffer, RelFileLocator *rlocator,
313 ForkNumber *forknum, BlockNumber *blknum);
314
315extern void MarkBufferDirtyHint(Buffer buffer, bool buffer_std);
316
317extern void UnlockBuffers(void);
318extern void UnlockBuffer(Buffer buffer);
319extern void LockBufferInternal(Buffer buffer, BufferLockMode mode);
320
321/*
322 * Handling BUFFER_LOCK_UNLOCK in bufmgr.c leads to sufficiently worse branch
323 * prediction to impact performance. Therefore handle that switch here, where
324 * most of the time `mode` will be a constant and thus can be optimized out by
325 * the compiler.
326 */
327static inline void
329{
331 UnlockBuffer(buffer);
332 else
333 LockBufferInternal(buffer, mode);
334}
335
336extern bool ConditionalLockBuffer(Buffer buffer);
337extern void LockBufferForCleanup(Buffer buffer);
338extern bool ConditionalLockBufferForCleanup(Buffer buffer);
339extern bool IsBufferCleanupOK(Buffer buffer);
340extern bool HoldingBufferPinThatDelaysRecovery(void);
341
343
344extern uint32 GetPinLimit(void);
345extern uint32 GetLocalPinLimit(void);
346extern uint32 GetAdditionalPinLimit(void);
350
351extern bool EvictUnpinnedBuffer(Buffer buf, bool *buffer_flushed);
355extern void EvictRelUnpinnedBuffers(Relation rel,
367
368/* in buf_init.c */
369extern void BufferManagerShmemInit(void);
370extern Size BufferManagerShmemSize(void);
371
372/* in localbuf.c */
373extern void AtProcExit_LocalBuffers(void);
374
375/* in freelist.c */
376
379 int ring_size_kb);
382
383extern void FreeAccessStrategy(BufferAccessStrategy strategy);
384
385
386/* inline functions */
387
388/*
389 * Although this header file is nominally backend-only, certain frontend
390 * programs like pg_waldump include it. For compilers that emit static
391 * inline functions even when they're unused, that leads to unsatisfied
392 * external references; hence hide these with #ifndef FRONTEND.
393 */
394
395#ifndef FRONTEND
396
397/*
398 * BufferIsValid
399 * True iff the given buffer number is valid (either as a shared
400 * or local buffer).
401 *
402 * Note: For a long time this was defined the same as BufferIsPinned,
403 * that is it would say False if you didn't hold a pin on the buffer.
404 * I believe this was bogus and served only to mask logic errors.
405 * Code should always know whether it has a buffer reference,
406 * independently of the pin state.
407 *
408 * Note: For a further long time this was not quite the inverse of the
409 * BufferIsInvalid() macro, in that it also did sanity checks to verify
410 * that the buffer number was in range. Most likely, this macro was
411 * originally intended only to be used in assertions, but its use has
412 * since expanded quite a bit, and the overhead of making those checks
413 * even in non-assert-enabled builds can be significant. Thus, we've
414 * now demoted the range checks to assertions within the macro itself.
415 */
416static inline bool
418{
421
422 return bufnum != InvalidBuffer;
423}
424
425/*
426 * BufferGetBlock
427 * Returns a reference to a disk page image associated with a buffer.
428 *
429 * Note:
430 * Assumes buffer is valid.
431 */
432static inline Block
434{
435 Assert(BufferIsValid(buffer));
436
437 if (BufferIsLocal(buffer))
438 return LocalBufferBlockPointers[-buffer - 1];
439 else
440 return (Block) (BufferBlocks + ((Size) (buffer - 1)) * BLCKSZ);
441}
442
443/*
444 * BufferGetPageSize
445 * Returns the page size within a buffer.
446 *
447 * Notes:
448 * Assumes buffer is valid.
449 *
450 * The buffer can be a raw disk block and need not contain a valid
451 * (formatted) disk page.
452 */
453/* XXX should dig out of buffer descriptor */
454static inline Size
456{
457 Assert(BufferIsValid(buffer));
458 return (Size) BLCKSZ;
459}
460
461/*
462 * BufferGetPage
463 * Returns the page associated with a buffer.
464 */
465static inline Page
467{
468 return (Page) BufferGetBlock(buffer);
469}
470
471#endif /* FRONTEND */
472
473#endif /* BUFMGR_H */
uint32 BlockNumber
Definition block.h:31
int Buffer
Definition buf.h:23
#define InvalidBuffer
Definition buf.h:25
#define BufferIsLocal(buffer)
Definition buf.h:37
BufferAccessStrategyType
Definition bufmgr.h:35
@ BAS_BULKREAD
Definition bufmgr.h:37
@ BAS_NORMAL
Definition bufmgr.h:36
@ BAS_VACUUM
Definition bufmgr.h:40
@ BAS_BULKWRITE
Definition bufmgr.h:39
void CheckBufferIsPinnedOnce(Buffer buffer)
Definition bufmgr.c:6484
void FlushRelationsAllBuffers(SMgrRelation *smgrs, int nrels)
Definition bufmgr.c:5165
void IncrBufferRefCount(Buffer buffer)
Definition bufmgr.c:5533
void DropDatabaseBuffers(Oid dbid)
Definition bufmgr.c:5030
PGDLLIMPORT int effective_io_concurrency
Definition bufmgr.c:184
BlockNumber BufferGetBlockNumber(Buffer buffer)
Definition bufmgr.c:4356
PGDLLIMPORT const PgAioHandleCallbacks aio_shared_buffer_readv_cb
Definition bufmgr.c:8510
struct SMgrRelationData * SMgrRelation
Definition bufmgr.h:97
void DropRelationBuffers(SMgrRelation smgr_reln, ForkNumber *forkNum, int nforks, BlockNumber *firstDelBlock)
Definition bufmgr.c:4680
Buffer ReleaseAndReadBuffer(Buffer buffer, Relation relation, BlockNumber blockNum)
Definition bufmgr.c:3121
PrefetchBufferResult PrefetchBuffer(Relation reln, ForkNumber forkNum, BlockNumber blockNum)
Definition bufmgr.c:772
int GetAccessStrategyPinLimit(BufferAccessStrategy strategy)
Definition freelist.c:609
bool StartReadBuffers(ReadBuffersOperation *operation, Buffer *buffers, BlockNumber blockNum, int *nblocks, int flags)
Definition bufmgr.c:1589
void EvictAllUnpinnedBuffers(int32 *buffers_evicted, int32 *buffers_flushed, int32 *buffers_skipped)
Definition bufmgr.c:7561
PGDLLIMPORT int bgwriter_flush_after
Definition bufmgr.c:208
PGDLLIMPORT const PgAioHandleCallbacks aio_local_buffer_readv_cb
Definition bufmgr.c:8519
void EvictRelUnpinnedBuffers(Relation rel, int32 *buffers_evicted, int32 *buffers_flushed, int32 *buffers_skipped)
Definition bufmgr.c:7611
PGDLLIMPORT bool zero_damaged_pages
Definition bufmgr.c:173
PGDLLIMPORT Block * LocalBufferBlockPointers
Definition localbuf.c:48
bool IsBufferCleanupOK(Buffer buffer)
Definition bufmgr.c:6748
bool BufferIsLockedByMeInMode(Buffer buffer, BufferLockMode mode)
Definition bufmgr.c:2997
PGDLLIMPORT int bgwriter_lru_maxpages
Definition bufmgr.c:174
Buffer ExtendBufferedRel(BufferManagerRelation bmr, ForkNumber forkNum, BufferAccessStrategy strategy, uint32 flags)
Definition bufmgr.c:964
uint32 GetAdditionalLocalPinLimit(void)
Definition localbuf.c:315
static Page BufferGetPage(Buffer buffer)
Definition bufmgr.h:466
void AtEOXact_Buffers(bool isCommit)
Definition bufmgr.c:4103
BufferAccessStrategy GetAccessStrategy(BufferAccessStrategyType btype)
Definition freelist.c:461
BlockNumber ExtendBufferedRelBy(BufferManagerRelation bmr, ForkNumber fork, BufferAccessStrategy strategy, uint32 flags, uint32 extend_by, Buffer *buffers, uint32 *extended_by)
Definition bufmgr.c:996
Size BufferManagerShmemSize(void)
Definition buf_init.c:152
static Block BufferGetBlock(Buffer buffer)
Definition bufmgr.h:433
void CreateAndCopyRelationData(RelFileLocator src_rlocator, RelFileLocator dst_rlocator, bool permanent)
Definition bufmgr.c:5377
PGDLLIMPORT int maintenance_io_concurrency
Definition bufmgr.c:191
BufferLockMode
Definition bufmgr.h:204
@ BUFFER_LOCK_SHARE_EXCLUSIVE
Definition bufmgr.h:215
@ BUFFER_LOCK_SHARE
Definition bufmgr.h:210
@ BUFFER_LOCK_EXCLUSIVE
Definition bufmgr.h:220
@ BUFFER_LOCK_UNLOCK
Definition bufmgr.h:205
void DropRelationsAllBuffers(SMgrRelation *smgr_reln, int nlocators)
Definition bufmgr.c:4800
Buffer ExtendBufferedRelTo(BufferManagerRelation bmr, ForkNumber fork, BufferAccessStrategy strategy, uint32 flags, BlockNumber extend_to, ReadBufferMode mode)
Definition bufmgr.c:1025
void AtProcExit_LocalBuffers(void)
Definition localbuf.c:1014
PGDLLIMPORT bool track_io_timing
Definition bufmgr.c:176
void BufferGetTag(Buffer buffer, RelFileLocator *rlocator, ForkNumber *forknum, BlockNumber *blknum)
Definition bufmgr.c:4377
PGDLLIMPORT int NBuffers
Definition globals.c:142
void UnlockBuffer(Buffer buffer)
Definition bufmgr.c:6405
void LimitAdditionalLocalPins(uint32 *additional_pins)
Definition localbuf.c:323
uint32 GetLocalPinLimit(void)
Definition localbuf.c:307
BufferAccessStrategy GetAccessStrategyWithSize(BufferAccessStrategyType btype, int ring_size_kb)
Definition freelist.c:546
char * DebugPrintBufferRefcount(Buffer buffer)
Definition bufmgr.c:4299
void CheckPointBuffers(int flags)
Definition bufmgr.c:4342
bool BufferIsDirty(Buffer buffer)
Definition bufmgr.c:3024
bool BgBufferSync(WritebackContext *wb_context)
Definition bufmgr.c:3735
bool BufferIsPermanent(Buffer buffer)
Definition bufmgr.c:4604
void MarkDirtyAllUnpinnedBuffers(int32 *buffers_dirtied, int32 *buffers_already_dirty, int32 *buffers_skipped)
Definition bufmgr.c:7811
void UnlockBuffers(void)
Definition bufmgr.c:5709
void * Block
Definition bufmgr.h:26
PGDLLIMPORT int io_combine_limit_guc
Definition bufmgr.c:200
int GetAccessStrategyBufferCount(BufferAccessStrategy strategy)
Definition freelist.c:586
PrefetchBufferResult PrefetchSharedBuffer(SMgrRelation smgr_reln, ForkNumber forkNum, BlockNumber blockNum)
Definition bufmgr.c:682
static Size BufferGetPageSize(Buffer buffer)
Definition bufmgr.h:455
bool ConditionalLockBuffer(Buffer buffer)
Definition bufmgr.c:6464
BlockNumber RelationGetNumberOfBlocksInFork(Relation relation, ForkNumber forkNum)
Definition bufmgr.c:4572
void BufferManagerShmemInit(void)
Definition buf_init.c:69
void ReleaseBuffer(Buffer buffer)
Definition bufmgr.c:5501
void FreeAccessStrategy(BufferAccessStrategy strategy)
Definition freelist.c:643
bool BufferIsLockedByMe(Buffer buffer)
Definition bufmgr.c:2971
PGDLLIMPORT int32 * LocalRefCount
Definition localbuf.c:49
XLogRecPtr BufferGetLSNAtomic(Buffer buffer)
Definition bufmgr.c:4634
void LockBufferInternal(Buffer buffer, BufferLockMode mode)
Definition bufmgr.c:6421
bool HoldingBufferPinThatDelaysRecovery(void)
Definition bufmgr.c:6664
bool MarkDirtyUnpinnedBuffer(Buffer buf, bool *buffer_already_dirty)
Definition bufmgr.c:7718
void UnlockReleaseBuffer(Buffer buffer)
Definition bufmgr.c:5518
static void LockBuffer(Buffer buffer, BufferLockMode mode)
Definition bufmgr.h:328
void WaitReadBuffers(ReadBuffersOperation *operation)
Definition bufmgr.c:1732
void MarkBufferDirty(Buffer buffer)
Definition bufmgr.c:3056
PGDLLIMPORT int io_combine_limit
Definition bufmgr.c:199
void LimitAdditionalPins(uint32 *additional_pins)
Definition bufmgr.c:2641
PGDLLIMPORT int NLocBuffer
Definition localbuf.c:45
void LockBufferForCleanup(Buffer buffer)
Definition bufmgr.c:6517
void MarkBufferDirtyHint(Buffer buffer, bool buffer_std)
Definition bufmgr.c:5565
void FlushRelationBuffers(Relation rel)
Definition bufmgr.c:5077
ExtendBufferedFlags
Definition bufmgr.h:69
@ EB_LOCK_TARGET
Definition bufmgr.h:93
@ EB_CLEAR_SIZE_CACHE
Definition bufmgr.h:90
@ EB_PERFORMING_RECOVERY
Definition bufmgr.h:78
@ EB_CREATE_FORK_IF_NEEDED
Definition bufmgr.h:84
@ EB_SKIP_EXTENSION_LOCK
Definition bufmgr.h:75
@ EB_LOCK_FIRST
Definition bufmgr.h:87
bool EvictUnpinnedBuffer(Buffer buf, bool *buffer_flushed)
Definition bufmgr.c:7532
Buffer ReadBufferWithoutRelcache(RelFileLocator rlocator, ForkNumber forkNum, BlockNumber blockNum, ReadBufferMode mode, BufferAccessStrategy strategy, bool permanent)
Definition bufmgr.c:948
PGDLLIMPORT int backend_flush_after
Definition bufmgr.c:209
PGDLLIMPORT double bgwriter_lru_multiplier
Definition bufmgr.c:175
bool ReadRecentBuffer(RelFileLocator rlocator, ForkNumber forkNum, BlockNumber blockNum, Buffer recent_buffer)
Definition bufmgr.c:803
void FlushDatabaseBuffers(Oid dbid)
Definition bufmgr.c:5441
void MarkDirtyRelUnpinnedBuffers(Relation rel, int32 *buffers_dirtied, int32 *buffers_already_dirty, int32 *buffers_skipped)
Definition bufmgr.c:7754
PGDLLIMPORT int checkpoint_flush_after
Definition bufmgr.c:207
bool StartReadBuffer(ReadBuffersOperation *operation, Buffer *buffer, BlockNumber blocknum, int flags)
Definition bufmgr.c:1608
Buffer ReadBufferExtended(Relation reln, ForkNumber forkNum, BlockNumber blockNum, ReadBufferMode mode, BufferAccessStrategy strategy)
Definition bufmgr.c:911
void InitBufferManagerAccess(void)
Definition bufmgr.c:4120
PGDLLIMPORT char * BufferBlocks
Definition buf_init.c:23
uint32 GetAdditionalPinLimit(void)
Definition bufmgr.c:2615
PGDLLIMPORT int io_max_combine_limit
Definition bufmgr.c:201
Buffer ReadBuffer(Relation reln, BlockNumber blockNum)
Definition bufmgr.c:864
ReadBufferMode
Definition bufmgr.h:45
@ RBM_ZERO_ON_ERROR
Definition bufmgr.h:51
@ RBM_ZERO_AND_CLEANUP_LOCK
Definition bufmgr.h:49
@ RBM_ZERO_AND_LOCK
Definition bufmgr.h:47
@ RBM_NORMAL
Definition bufmgr.h:46
@ RBM_NORMAL_NO_LOG
Definition bufmgr.h:52
bool ConditionalLockBufferForCleanup(Buffer buffer)
Definition bufmgr.c:6690
uint32 GetPinLimit(void)
Definition bufmgr.c:2603
void FlushOneBuffer(Buffer buffer)
Definition bufmgr.c:5481
static bool BufferIsValid(Buffer bufnum)
Definition bufmgr.h:417
PageData * Page
Definition bufpage.h:81
#define PGDLLIMPORT
Definition c.h:1328
#define Assert(condition)
Definition c.h:873
int16_t int16
Definition c.h:541
int32_t int32
Definition c.h:542
uint32_t uint32
Definition c.h:546
size_t Size
Definition c.h:619
static PgChecksumMode mode
static char buf[DEFAULT_XLOG_SEG_SIZE]
unsigned int Oid
static int fb(int x)
ForkNumber
Definition relpath.h:56
SMgrRelation smgr
Definition bufmgr.h:110
Buffer recent_buffer
Definition bufmgr.h:61
ForkNumber forknum
Definition bufmgr.h:137
PgAioWaitRef io_wref
Definition bufmgr.h:150
SMgrRelation smgr
Definition bufmgr.h:135
BufferAccessStrategy strategy
Definition bufmgr.h:138
BlockNumber blocknum
Definition bufmgr.h:146
PgAioReturn io_return
Definition bufmgr.h:151
uint64 XLogRecPtr
Definition xlogdefs.h:21