53 BlockNumber blocknum,
const void *buffer,
bool skipFsync);
61 BlockNumber blocknum,
const void *buffer,
bool skipFsync);
74 .smgr_shutdown = NULL,
265 for (forknum = 0; forknum <=
MAX_FORKNUM; forknum++)
276 elog(
ERROR,
"SMgrRelation hashtable corrupted");
401 for (
i = 0;
i < nrels;
i++)
405 for (forknum = 0; forknum <=
MAX_FORKNUM; forknum++)
407 if (
smgrsw[which].smgr_exists(rels[
i], forknum))
444 for (
i = 0;
i < nrels;
i++)
449 rlocators[
i] = rlocator;
452 for (forknum = 0; forknum <=
MAX_FORKNUM; forknum++)
453 smgrsw[which].smgr_close(rels[
i], forknum);
464 for (
i = 0;
i < nrels;
i++)
475 for (
i = 0;
i < nrels;
i++)
479 for (forknum = 0; forknum <=
MAX_FORKNUM; forknum++)
480 smgrsw[which].smgr_unlink(rlocators[
i], forknum, isRedo);
498 const void *buffer,
bool skipFsync)
523 int nblocks,
bool skipFsync)
584 const void *buffer,
bool skipFsync)
678 for (
i = 0;
i < nforks;
i++)
#define InvalidBlockNumber
void FlushRelationsAllBuffers(SMgrRelation *smgrs, int nrels)
void DropRelationBuffers(SMgrRelation smgr_reln, ForkNumber *forkNum, int nforks, BlockNumber *firstDelBlock)
void DropRelationsAllBuffers(SMgrRelation *smgr_reln, int nlocators)
elog(ERROR, "%s: %s", p2, msg)
void * hash_search(HTAB *hashp, const void *keyPtr, HASHACTION action, bool *foundPtr)
HTAB * hash_create(const char *tabname, long nelem, const HASHCTL *info, int flags)
void * hash_seq_search(HASH_SEQ_STATUS *status)
void hash_seq_init(HASH_SEQ_STATUS *status, HTAB *hashp)
static void dlist_init(dlist_head *head)
static void dlist_delete(dlist_node *node)
#define dlist_foreach_modify(iter, lhead)
static void dlist_push_tail(dlist_head *head, dlist_node *node)
#define dlist_container(type, membername, ptr)
void CacheInvalidateSmgr(RelFileLocatorBackend rlocator)
void on_proc_exit(pg_on_exit_callback function, Datum arg)
Assert(fmt[strlen(fmt) - 1] !='\n')
void pfree(void *pointer)
void mdunlink(RelFileLocatorBackend rlocator, ForkNumber forknum, bool isRedo)
void mdwrite(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, const void *buffer, bool skipFsync)
bool mdexists(SMgrRelation reln, ForkNumber forknum)
BlockNumber mdnblocks(SMgrRelation reln, ForkNumber forknum)
void mdcreate(SMgrRelation reln, ForkNumber forknum, bool isRedo)
void mdextend(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, const void *buffer, bool skipFsync)
void mdclose(SMgrRelation reln, ForkNumber forknum)
void mdzeroextend(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, int nblocks, bool skipFsync)
void mdwriteback(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, BlockNumber nblocks)
void mdread(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, void *buffer)
void mdopen(SMgrRelation reln)
bool mdprefetch(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum)
void mdtruncate(SMgrRelation reln, ForkNumber forknum, BlockNumber nblocks)
void mdimmedsync(SMgrRelation reln, ForkNumber forknum)
struct RelFileLocatorBackend RelFileLocatorBackend
BlockNumber smgrnblocks(SMgrRelation reln, ForkNumber forknum)
static HTAB * SMgrRelationHash
void smgrwriteback(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, BlockNumber nblocks)
void smgrrelease(SMgrRelation reln)
void smgrreleaseall(void)
void smgrsetowner(SMgrRelation *owner, SMgrRelation reln)
bool smgrprefetch(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum)
void smgrcloserellocator(RelFileLocatorBackend rlocator)
void smgrwrite(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, const void *buffer, bool skipFsync)
void smgrdosyncall(SMgrRelation *rels, int nrels)
void smgrimmedsync(SMgrRelation reln, ForkNumber forknum)
void smgrcreate(SMgrRelation reln, ForkNumber forknum, bool isRedo)
BlockNumber smgrnblocks_cached(SMgrRelation reln, ForkNumber forknum)
void smgrclose(SMgrRelation reln)
SMgrRelation smgropen(RelFileLocator rlocator, BackendId backend)
void smgrzeroextend(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, int nblocks, bool skipFsync)
void smgrread(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, void *buffer)
bool ProcessBarrierSmgrRelease(void)
static void smgrshutdown(int code, Datum arg)
void smgrextend(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, const void *buffer, bool skipFsync)
void smgrtruncate(SMgrRelation reln, ForkNumber *forknum, int nforks, BlockNumber *nblocks)
bool smgrexists(SMgrRelation reln, ForkNumber forknum)
void smgrdounlinkall(SMgrRelation *rels, int nrels, bool isRedo)
static dlist_head unowned_relns
void smgrclearowner(SMgrRelation *owner, SMgrRelation reln)
static const f_smgr smgrsw[]
struct SMgrRelationData SMgrRelationData
SMgrRelationData * SMgrRelation
struct SMgrRelationData ** smgr_owner
BlockNumber smgr_targblock
BlockNumber smgr_cached_nblocks[MAX_FORKNUM+1]
RelFileLocatorBackend smgr_rlocator
bool(* smgr_prefetch)(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum)
void(* smgr_writeback)(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, BlockNumber nblocks)
void(* smgr_extend)(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, const void *buffer, bool skipFsync)
void(* smgr_create)(SMgrRelation reln, ForkNumber forknum, bool isRedo)
void(* smgr_write)(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, const void *buffer, bool skipFsync)
BlockNumber(* smgr_nblocks)(SMgrRelation reln, ForkNumber forknum)
void(* smgr_immedsync)(SMgrRelation reln, ForkNumber forknum)
void(* smgr_zeroextend)(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, int nblocks, bool skipFsync)
void(* smgr_unlink)(RelFileLocatorBackend rlocator, ForkNumber forknum, bool isRedo)
void(* smgr_open)(SMgrRelation reln)
void(* smgr_shutdown)(void)
void(* smgr_read)(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, void *buffer)
bool(* smgr_exists)(SMgrRelation reln, ForkNumber forknum)
void(* smgr_truncate)(SMgrRelation reln, ForkNumber forknum, BlockNumber nblocks)
void(* smgr_close)(SMgrRelation reln, ForkNumber forknum)