132 .smgr_shutdown =
NULL,
276 reln->smgr_which = 0;
298 if (
reln->pincount == 0)
315 if (
reln->pincount == 0)
331 for (forknum = 0; forknum <=
MAX_FORKNUM; forknum++)
337 &(
reln->smgr_rlocator),
339 elog(
ERROR,
"SMgrRelation hashtable corrupted");
513 for (
i = 0;
i < nrels;
i++)
517 for (forknum = 0; forknum <=
MAX_FORKNUM; forknum++)
565 for (
i = 0;
i < nrels;
i++)
573 for (forknum = 0; forknum <=
MAX_FORKNUM; forknum++)
585 for (
i = 0;
i < nrels;
i++)
596 for (
i = 0;
i < nrels;
i++)
600 for (forknum = 0; forknum <=
MAX_FORKNUM; forknum++)
633 if (
reln->smgr_cached_nblocks[forknum] == blocknum)
634 reln->smgr_cached_nblocks[forknum] = blocknum + 1;
662 if (
reln->smgr_cached_nblocks[forknum] == blocknum)
663 reln->smgr_cached_nblocks[forknum] = blocknum + nblocks;
759 reln, forknum, blocknum, buffers,
832 reln->smgr_cached_nblocks[forknum] = result;
855 return reln->smgr_cached_nblocks[forknum];
922 reln->smgr_cached_nblocks[forknum[
i]] =
1051 sd->smgr.forkNum = forknum;
1052 sd->smgr.blockNum = blocknum;
1053 sd->smgr.nblocks = nblocks;
1078 if (
sd->smgr.is_temp)
1114 if (
sd->smgr.nblocks == 0)
1116 else if (
sd->smgr.nblocks == 1)
1117 desc =
psprintf(
_(
"block %u in file \"%s\""),
1121 desc =
psprintf(
_(
"blocks %u..%u in file \"%s\""),
1123 sd->smgr.blockNum +
sd->smgr.nblocks - 1,
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)
struct SMgrRelationData * SMgrRelation
#define Assert(condition)
void * hash_search(HTAB *hashp, const void *keyPtr, HASHACTION action, bool *foundPtr)
HTAB * hash_create(const char *tabname, int64 nelem, const HASHCTL *info, int flags)
void * hash_seq_search(HASH_SEQ_STATUS *status)
void hash_seq_init(HASH_SEQ_STATUS *status, HTAB *hashp)
#define palloc_array(type, count)
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,...)
#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)
char str[REL_PATH_STR_MAXLEN+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)