diff --git a/src/backend/access/transam/clog.c b/src/backend/access/transam/clog.c index 63d0ae6f63f894965505776a44b987321fb3c01e..df401379253269a453888b824cc9bb7a4560da26 100644 --- a/src/backend/access/transam/clog.c +++ b/src/backend/access/transam/clog.c @@ -445,7 +445,7 @@ BootStrapCLOG(void) slotno = ZeroCLOGPage(0, false); /* Make sure it's written out */ - SimpleLruWritePage(ClogCtl, slotno, NULL); + SimpleLruWritePage(ClogCtl, slotno); Assert(!ClogCtl->shared->page_dirty[slotno]); LWLockRelease(CLogControlLock); @@ -698,7 +698,7 @@ clog_redo(XLogRecPtr lsn, XLogRecord *record) LWLockAcquire(CLogControlLock, LW_EXCLUSIVE); slotno = ZeroCLOGPage(pageno, false); - SimpleLruWritePage(ClogCtl, slotno, NULL); + SimpleLruWritePage(ClogCtl, slotno); Assert(!ClogCtl->shared->page_dirty[slotno]); LWLockRelease(CLogControlLock); diff --git a/src/backend/access/transam/multixact.c b/src/backend/access/transam/multixact.c index 9422ef399497897bef6c26633690aa313ecc65cc..7e84444f46e958677f00240a7073ef87bcb4f0f5 100644 --- a/src/backend/access/transam/multixact.c +++ b/src/backend/access/transam/multixact.c @@ -1454,7 +1454,7 @@ BootStrapMultiXact(void) slotno = ZeroMultiXactOffsetPage(0, false); /* Make sure it's written out */ - SimpleLruWritePage(MultiXactOffsetCtl, slotno, NULL); + SimpleLruWritePage(MultiXactOffsetCtl, slotno); Assert(!MultiXactOffsetCtl->shared->page_dirty[slotno]); LWLockRelease(MultiXactOffsetControlLock); @@ -1465,7 +1465,7 @@ BootStrapMultiXact(void) slotno = ZeroMultiXactMemberPage(0, false); /* Make sure it's written out */ - SimpleLruWritePage(MultiXactMemberCtl, slotno, NULL); + SimpleLruWritePage(MultiXactMemberCtl, slotno); Assert(!MultiXactMemberCtl->shared->page_dirty[slotno]); LWLockRelease(MultiXactMemberControlLock); @@ -1986,7 +1986,7 @@ multixact_redo(XLogRecPtr lsn, XLogRecord *record) LWLockAcquire(MultiXactOffsetControlLock, LW_EXCLUSIVE); slotno = ZeroMultiXactOffsetPage(pageno, false); - SimpleLruWritePage(MultiXactOffsetCtl, slotno, NULL); + SimpleLruWritePage(MultiXactOffsetCtl, slotno); Assert(!MultiXactOffsetCtl->shared->page_dirty[slotno]); LWLockRelease(MultiXactOffsetControlLock); @@ -2001,7 +2001,7 @@ multixact_redo(XLogRecPtr lsn, XLogRecord *record) LWLockAcquire(MultiXactMemberControlLock, LW_EXCLUSIVE); slotno = ZeroMultiXactMemberPage(pageno, false); - SimpleLruWritePage(MultiXactMemberCtl, slotno, NULL); + SimpleLruWritePage(MultiXactMemberCtl, slotno); Assert(!MultiXactMemberCtl->shared->page_dirty[slotno]); LWLockRelease(MultiXactMemberControlLock); diff --git a/src/backend/access/transam/slru.c b/src/backend/access/transam/slru.c index 95c388fc8310ea137702688a47a5fd9f295f748c..3bf8bb0b33afd382723c5a258591b692e38502c5 100644 --- a/src/backend/access/transam/slru.c +++ b/src/backend/access/transam/slru.c @@ -78,6 +78,8 @@ typedef struct SlruFlushData int segno[MAX_FLUSH_BUFFERS]; /* their log seg#s */ } SlruFlushData; +typedef struct SlruFlushData *SlruFlush; + /* * Macro to mark a buffer slot "most recently used". Note multiple evaluation * of arguments! @@ -123,6 +125,7 @@ static int slru_errno; static void SimpleLruZeroLSNs(SlruCtl ctl, int slotno); static void SimpleLruWaitIO(SlruCtl ctl, int slotno); +static void SlruInternalWritePage(SlruCtl ctl, int slotno, SlruFlush fdata); static bool SlruPhysicalReadPage(SlruCtl ctl, int pageno, int slotno); static bool SlruPhysicalWritePage(SlruCtl ctl, int pageno, int slotno, SlruFlush fdata); @@ -485,8 +488,8 @@ SimpleLruReadPage_ReadOnly(SlruCtl ctl, int pageno, TransactionId xid) * * Control lock must be held at entry, and will be held at exit. */ -void -SimpleLruWritePage(SlruCtl ctl, int slotno, SlruFlush fdata) +static void +SlruInternalWritePage(SlruCtl ctl, int slotno, SlruFlush fdata) { SlruShared shared = ctl->shared; int pageno = shared->page_number[slotno]; @@ -552,6 +555,17 @@ SimpleLruWritePage(SlruCtl ctl, int slotno, SlruFlush fdata) SlruReportIOError(ctl, pageno, InvalidTransactionId); } +/* + * Wrapper of SlruInternalWritePage, for external callers. + * fdata is always passed a NULL here. + */ +void +SimpleLruWritePage(SlruCtl ctl, int slotno) +{ + SlruInternalWritePage(ctl, slotno, NULL); +} + + /* * Physical read of a (previously existing) page into a buffer slot * @@ -975,7 +989,7 @@ SlruSelectLRUPage(SlruCtl ctl, int pageno) * we wait for the existing I/O to complete. */ if (shared->page_status[bestslot] == SLRU_PAGE_VALID) - SimpleLruWritePage(ctl, bestslot, NULL); + SlruInternalWritePage(ctl, bestslot, NULL); else SimpleLruWaitIO(ctl, bestslot); @@ -1009,7 +1023,7 @@ SimpleLruFlush(SlruCtl ctl, bool checkpoint) for (slotno = 0; slotno < shared->num_slots; slotno++) { - SimpleLruWritePage(ctl, slotno, &fdata); + SlruInternalWritePage(ctl, slotno, &fdata); /* * When called during a checkpoint, we cannot assert that the slot is @@ -1114,7 +1128,7 @@ restart:; * keep the logic the same as it was.) */ if (shared->page_status[slotno] == SLRU_PAGE_VALID) - SimpleLruWritePage(ctl, slotno, NULL); + SlruInternalWritePage(ctl, slotno, NULL); else SimpleLruWaitIO(ctl, slotno); goto restart; diff --git a/src/backend/access/transam/subtrans.c b/src/backend/access/transam/subtrans.c index 44e33b2b94f9f8c2edcf39e34f3febf78f9de5b9..4e266513cb394453aa085f1d5ea4d6db4e2c8ffe 100644 --- a/src/backend/access/transam/subtrans.c +++ b/src/backend/access/transam/subtrans.c @@ -205,7 +205,7 @@ BootStrapSUBTRANS(void) slotno = ZeroSUBTRANSPage(0); /* Make sure it's written out */ - SimpleLruWritePage(SubTransCtl, slotno, NULL); + SimpleLruWritePage(SubTransCtl, slotno); Assert(!SubTransCtl->shared->page_dirty[slotno]); LWLockRelease(SubtransControlLock); diff --git a/src/backend/commands/async.c b/src/backend/commands/async.c index a9923341147a32c289a97ad8ced2ba9919234f4f..f12b3a9f1382cbc68b1b92256bebf3df511154ab 100644 --- a/src/backend/commands/async.c +++ b/src/backend/commands/async.c @@ -507,7 +507,7 @@ AsyncShmemInit(void) LWLockAcquire(AsyncCtlLock, LW_EXCLUSIVE); slotno = SimpleLruZeroPage(AsyncCtl, QUEUE_POS_PAGE(QUEUE_HEAD)); /* This write is just to verify that pg_notify/ is writable */ - SimpleLruWritePage(AsyncCtl, slotno, NULL); + SimpleLruWritePage(AsyncCtl, slotno); LWLockRelease(AsyncCtlLock); } } diff --git a/src/include/access/slru.h b/src/include/access/slru.h index 710cca70acd67e03e5f3a255b048a719ae4c4709..ede1b428ab382f4222816f0660e11799ad0d4e38 100644 --- a/src/include/access/slru.h +++ b/src/include/access/slru.h @@ -133,9 +133,6 @@ typedef struct SlruCtlData typedef SlruCtlData *SlruCtl; -/* Opaque struct known only in slru.c */ -typedef struct SlruFlushData *SlruFlush; - extern Size SimpleLruShmemSize(int nslots, int nlsns); extern void SimpleLruInit(SlruCtl ctl, const char *name, int nslots, int nlsns, @@ -145,7 +142,7 @@ extern int SimpleLruReadPage(SlruCtl ctl, int pageno, bool write_ok, TransactionId xid); extern int SimpleLruReadPage_ReadOnly(SlruCtl ctl, int pageno, TransactionId xid); -extern void SimpleLruWritePage(SlruCtl ctl, int slotno, SlruFlush fdata); +extern void SimpleLruWritePage(SlruCtl ctl, int slotno); extern void SimpleLruFlush(SlruCtl ctl, bool checkpoint); extern void SimpleLruTruncate(SlruCtl ctl, int cutoffPage); extern bool SlruScanDirectory(SlruCtl ctl, int cutoffPage, bool doDeletions);