From: Kyotaro Horiguchi Date: Thu, 21 Nov 2019 19:28:35 +0900 Subject: [PATCH v25 2/5] Revert FlushRelationBuffersWithoutRelcache. Succeeding patch makes the function useless and the function is no longer useful globally. Revert it. --- src/backend/storage/buffer/bufmgr.c | 27 ++++++++++----------------- src/include/storage/bufmgr.h | 2 -- 2 files changed, 10 insertions(+), 19 deletions(-) diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c index 746ce477fc..67bbb26cae 100644 --- a/src/backend/storage/buffer/bufmgr.c +++ b/src/backend/storage/buffer/bufmgr.c @@ -3203,27 +3203,20 @@ PrintPinnedBufs(void) void FlushRelationBuffers(Relation rel) { - RelationOpenSmgr(rel); - - FlushRelationBuffersWithoutRelcache(rel->rd_smgr, - RelationUsesLocalBuffers(rel)); -} - -void -FlushRelationBuffersWithoutRelcache(SMgrRelation smgr, bool islocal) -{ - RelFileNode rnode = smgr->smgr_rnode.node; - int i; + int i; BufferDesc *bufHdr; - if (islocal) + /* Open rel at the smgr level if not already done */ + RelationOpenSmgr(rel); + + if (RelationUsesLocalBuffers(rel)) { for (i = 0; i < NLocBuffer; i++) { uint32 buf_state; bufHdr = GetLocalBufferDescriptor(i); - if (RelFileNodeEquals(bufHdr->tag.rnode, rnode) && + if (RelFileNodeEquals(bufHdr->tag.rnode, rel->rd_node) && ((buf_state = pg_atomic_read_u32(&bufHdr->state)) & (BM_VALID | BM_DIRTY)) == (BM_VALID | BM_DIRTY)) { @@ -3240,7 +3233,7 @@ FlushRelationBuffersWithoutRelcache(SMgrRelation smgr, bool islocal) PageSetChecksumInplace(localpage, bufHdr->tag.blockNum); - smgrwrite(smgr, + smgrwrite(rel->rd_smgr, bufHdr->tag.forkNum, bufHdr->tag.blockNum, localpage, @@ -3270,18 +3263,18 @@ FlushRelationBuffersWithoutRelcache(SMgrRelation smgr, bool islocal) * As in DropRelFileNodeBuffers, an unlocked precheck should be safe * and saves some cycles. */ - if (!RelFileNodeEquals(bufHdr->tag.rnode, rnode)) + if (!RelFileNodeEquals(bufHdr->tag.rnode, rel->rd_node)) continue; ReservePrivateRefCountEntry(); buf_state = LockBufHdr(bufHdr); - if (RelFileNodeEquals(bufHdr->tag.rnode, rnode) && + if (RelFileNodeEquals(bufHdr->tag.rnode, rel->rd_node) && (buf_state & (BM_VALID | BM_DIRTY)) == (BM_VALID | BM_DIRTY)) { PinBuffer_Locked(bufHdr); LWLockAcquire(BufferDescriptorGetContentLock(bufHdr), LW_SHARED); - FlushBuffer(bufHdr, smgr); + FlushBuffer(bufHdr, rel->rd_smgr); LWLockRelease(BufferDescriptorGetContentLock(bufHdr)); UnpinBuffer(bufHdr, true); } diff --git a/src/include/storage/bufmgr.h b/src/include/storage/bufmgr.h index 8097d5ab22..8cd1cf25d9 100644 --- a/src/include/storage/bufmgr.h +++ b/src/include/storage/bufmgr.h @@ -192,8 +192,6 @@ extern BlockNumber RelationGetNumberOfBlocksInFork(Relation relation, ForkNumber forkNum); extern void FlushOneBuffer(Buffer buffer); extern void FlushRelationBuffers(Relation rel); -extern void FlushRelationBuffersWithoutRelcache(struct SMgrRelationData *smgr, - bool islocal); extern void FlushDatabaseBuffers(Oid dbid); extern void DropRelFileNodeBuffers(RelFileNodeBackend rnode, ForkNumber *forkNum, int nforks, BlockNumber *firstDelBlock); -- 2.23.0 ----Next_Part(Tue_Nov_26_21_37_52_2019_374)-- Content-Type: Text/X-Patch; charset=us-ascii Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="v25-0003-Improve-the-performance-of-relation-syncs.patch"