52 BlockNumber blocknum,
char *buffer,
bool skipFsync);
58 BlockNumber blocknum,
char *buffer,
bool skipFsync);
71 .smgr_shutdown = NULL,
261 for (forknum = 0; forknum <=
MAX_FORKNUM; forknum++)
272 elog(
ERROR,
"SMgrRelation hashtable corrupted");
397 for (
i = 0;
i < nrels;
i++)
401 for (forknum = 0; forknum <=
MAX_FORKNUM; forknum++)
403 if (
smgrsw[which].smgr_exists(rels[
i], forknum))
440 for (
i = 0;
i < nrels;
i++)
445 rlocators[
i] = rlocator;
448 for (forknum = 0; forknum <=
MAX_FORKNUM; forknum++)
449 smgrsw[which].smgr_close(rels[
i], forknum);
460 for (
i = 0;
i < nrels;
i++)
471 for (
i = 0;
i < nrels;
i++)
475 for (forknum = 0; forknum <=
MAX_FORKNUM; forknum++)
476 smgrsw[which].smgr_unlink(rlocators[
i], forknum, isRedo);
494 char *buffer,
bool skipFsync)
555 char *buffer,
bool skipFsync)
649 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)
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, char *buffer, bool skipFsync)
void mdclose(SMgrRelation reln, ForkNumber forknum)
void mdwriteback(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, BlockNumber nblocks)
void mdopen(SMgrRelation reln)
void mdread(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, char *buffer)
bool mdprefetch(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum)
void mdwrite(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, char *buffer, bool skipFsync)
void mdtruncate(SMgrRelation reln, ForkNumber forknum, BlockNumber nblocks)
void mdimmedsync(SMgrRelation reln, ForkNumber forknum)
static void static void status(const char *fmt,...) pg_attribute_printf(1
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 smgrwrite(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, char *buffer, bool skipFsync)
void smgrreleaseall(void)
void smgrsetowner(SMgrRelation *owner, SMgrRelation reln)
void smgrextend(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, char *buffer, bool skipFsync)
bool smgrprefetch(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum)
void smgrcloserellocator(RelFileLocatorBackend rlocator)
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)
bool ProcessBarrierSmgrRelease(void)
static void smgrshutdown(int code, Datum arg)
void smgrread(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, char *buffer)
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_create)(SMgrRelation reln, ForkNumber forknum, bool isRedo)
BlockNumber(* smgr_nblocks)(SMgrRelation reln, ForkNumber forknum)
void(* smgr_immedsync)(SMgrRelation reln, ForkNumber forknum)
void(* smgr_read)(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, char *buffer)
void(* smgr_write)(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, char *buffer, bool skipFsync)
void(* smgr_unlink)(RelFileLocatorBackend rlocator, ForkNumber forknum, bool isRedo)
void(* smgr_extend)(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, char *buffer, bool skipFsync)
void(* smgr_open)(SMgrRelation reln)
void(* smgr_shutdown)(void)
bool(* smgr_exists)(SMgrRelation reln, ForkNumber forknum)
void(* smgr_truncate)(SMgrRelation reln, ForkNumber forknum, BlockNumber nblocks)
void(* smgr_close)(SMgrRelation reln, ForkNumber forknum)