100 BlockNumber blocknum,
const void *buffer,
bool skipFsync);
102 BlockNumber blocknum,
int nblocks,
bool skipFsync);
132 .smgr_shutdown = NULL,
331 for (forknum = 0; forknum <=
MAX_FORKNUM; forknum++)
339 elog(
ERROR,
"SMgrRelation hashtable corrupted");
513 for (
i = 0;
i < nrels;
i++)
517 for (forknum = 0; forknum <=
MAX_FORKNUM; forknum++)
519 if (
smgrsw[which].smgr_exists(rels[
i], forknum))
565 for (
i = 0;
i < nrels;
i++)
570 rlocators[
i] = rlocator;
573 for (forknum = 0; forknum <=
MAX_FORKNUM; forknum++)
574 smgrsw[which].smgr_close(rels[
i], forknum);
585 for (
i = 0;
i < nrels;
i++)
596 for (
i = 0;
i < nrels;
i++)
600 for (forknum = 0; forknum <=
MAX_FORKNUM; forknum++)
601 smgrsw[which].smgr_unlink(rlocators[
i], forknum, isRedo);
621 const void *buffer,
bool skipFsync)
650 int nblocks,
bool skipFsync)
759 reln, forknum, blocknum, buffers,
792 const void **buffers,
BlockNumber nblocks,
bool skipFsync)
796 buffers, nblocks, skipFsync);
899 for (
i = 0;
i < nforks;
i++)
905 old_nblocks[
i], nblocks[
i]);
1108 desc =
psprintf(
_(
"block %u in file \"%s\""),
1112 desc =
psprintf(
_(
"blocks %u..%u in file \"%s\""),
ProcNumber pgaio_io_get_owner(PgAioHandle *ioh)
PgAioOpData * pgaio_io_get_op_data(PgAioHandle *ioh)
PgAioOp pgaio_io_get_op(PgAioHandle *ioh)
PgAioTargetData * pgaio_io_get_target_data(PgAioHandle *ioh)
void pgaio_io_set_target(PgAioHandle *ioh, PgAioTargetID targetid)
#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)
void * hash_search(HTAB *hashp, const void *keyPtr, HASHACTION action, bool *foundPtr)
void * hash_seq_search(HASH_SEQ_STATUS *status)
HTAB * hash_create(const char *tabname, long nelem, const HASHCTL *info, int flags)
void hash_seq_init(HASH_SEQ_STATUS *status, HTAB *hashp)
Assert(PointerIsAligned(start, uint64))
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)
void pfree(void *pointer)
void mdunlink(RelFileLocatorBackend rlocator, ForkNumber forknum, bool isRedo)
void mdtruncate(SMgrRelation reln, ForkNumber forknum, BlockNumber curnblk, BlockNumber nblocks)
void mdwritev(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, const void **buffers, BlockNumber nblocks, bool skipFsync)
bool mdexists(SMgrRelation reln, ForkNumber forknum)
void mdreadv(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, void **buffers, BlockNumber nblocks)
BlockNumber mdnblocks(SMgrRelation reln, ForkNumber forknum)
void mdcreate(SMgrRelation reln, ForkNumber forknum, bool isRedo)
int mdfd(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, uint32 *off)
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)
uint32 mdmaxcombine(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum)
void mdstartreadv(PgAioHandle *ioh, SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, void **buffers, BlockNumber nblocks)
bool mdprefetch(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, int nblocks)
void mdregistersync(SMgrRelation reln, ForkNumber forknum)
void mdopen(SMgrRelation reln)
void mdimmedsync(SMgrRelation reln, ForkNumber forknum)
#define RESUME_INTERRUPTS()
#define INTERRUPTS_CAN_BE_PROCESSED()
#define HOLD_INTERRUPTS()
static int fd(const char *x, int i)
#define INVALID_PROC_NUMBER
char * psprintf(const char *fmt,...)
struct RelFileLocatorBackend RelFileLocatorBackend
#define relpathbackend(rlocator, backend, forknum)
#define RelFileNumberIsValid(relnumber)
BlockNumber smgrnblocks(SMgrRelation reln, ForkNumber forknum)
void smgrstartreadv(PgAioHandle *ioh, SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, void **buffers, BlockNumber nblocks)
static HTAB * SMgrRelationHash
void smgrwriteback(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, BlockNumber nblocks)
void smgrrelease(SMgrRelation reln)
static void smgrdestroy(SMgrRelation reln)
SMgrRelation smgropen(RelFileLocator rlocator, ProcNumber backend)
void smgrdestroyall(void)
void smgrreleaseall(void)
static char * smgr_aio_describe_identity(const PgAioTargetData *sd)
static dlist_head unpinned_relns
void smgrpin(SMgrRelation reln)
void smgrunpin(SMgrRelation reln)
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)
uint32 smgrmaxcombine(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum)
void smgrzeroextend(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, int nblocks, bool skipFsync)
void smgrtruncate(SMgrRelation reln, ForkNumber *forknum, int nforks, BlockNumber *old_nblocks, BlockNumber *nblocks)
bool ProcessBarrierSmgrRelease(void)
static void smgrshutdown(int code, Datum arg)
static int smgrfd(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, uint32 *off)
void smgrextend(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, const void *buffer, bool skipFsync)
void smgrwritev(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, const void **buffers, BlockNumber nblocks, bool skipFsync)
void smgrreleaserellocator(RelFileLocatorBackend rlocator)
bool smgrexists(SMgrRelation reln, ForkNumber forknum)
void smgrreadv(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, void **buffers, BlockNumber nblocks)
void smgrdounlinkall(SMgrRelation *rels, int nrels, bool isRedo)
void smgrregistersync(SMgrRelation reln, ForkNumber forknum)
bool smgrprefetch(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, int nblocks)
static void smgr_aio_reopen(PgAioHandle *ioh)
const PgAioTargetInfo aio_smgr_target_info
static const f_smgr smgrsw[]
void pgaio_io_set_target_smgr(PgAioHandle *ioh, SMgrRelationData *smgr, ForkNumber forknum, BlockNumber blocknum, int nblocks, bool skip_fsync)
struct SMgrRelationData SMgrRelationData
SMgrRelationData * SMgrRelation
char str[REL_PATH_STR_MAXLEN+1]
BlockNumber smgr_targblock
BlockNumber smgr_cached_nblocks[MAX_FORKNUM+1]
RelFileLocatorBackend smgr_rlocator
bool(* smgr_prefetch)(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, int nblocks)
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)
BlockNumber(* smgr_nblocks)(SMgrRelation reln, ForkNumber forknum)
void(* smgr_truncate)(SMgrRelation reln, ForkNumber forknum, BlockNumber old_blocks, BlockNumber nblocks)
uint32(* smgr_maxcombine)(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum)
void(* smgr_registersync)(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_readv)(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, void **buffers, BlockNumber nblocks)
void(* smgr_unlink)(RelFileLocatorBackend rlocator, ForkNumber forknum, bool isRedo)
void(* smgr_startreadv)(PgAioHandle *ioh, SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, void **buffers, BlockNumber nblocks)
int(* smgr_fd)(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, uint32 *off)
void(* smgr_open)(SMgrRelation reln)
void(* smgr_shutdown)(void)
void(* smgr_writev)(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, const void **buffers, BlockNumber nblocks, bool skipFsync)
bool(* smgr_exists)(SMgrRelation reln, ForkNumber forknum)
void(* smgr_close)(SMgrRelation reln, ForkNumber forknum)
struct PgAioOpData::@123 write
struct PgAioOpData::@122 read
struct PgAioTargetData::@124 smgr