From c419321061420a6eb5851f2fdb0e0d5db24f5a4e Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 3 Apr 2015 16:49:11 -0400 Subject: [PATCH] Remove unnecessary variables in _hash_splitbucket(). Commit ed9cc2b5df59fdbc50cce37399e26b03ab2c1686 made it unnecessary to pass start_nblkno to _hash_splitbucket(), and for that matter unnecessary to have the internal nblkno variable either. My compiler didn't complain about that, but some did. I also rearranged the use of oblkno a bit to make that case more parallel. Report and initial patch by Petr Jelinek, rearranged a bit by me. Back-patch to all branches, like the previous patch. --- src/backend/access/hash/hashpage.c | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/src/backend/access/hash/hashpage.c b/src/backend/access/hash/hashpage.c index 3c041fb139..9ab2b06cc9 100644 --- a/src/backend/access/hash/hashpage.c +++ b/src/backend/access/hash/hashpage.c @@ -37,10 +37,9 @@ static bool _hash_alloc_buckets(Relation rel, BlockNumber firstblock, uint32 nblocks); static void _hash_splitbucket(Relation rel, Buffer metabuf, - Buffer nbuf, Bucket obucket, Bucket nbucket, BlockNumber start_oblkno, - BlockNumber start_nblkno, + Buffer nbuf, uint32 maxbucket, uint32 highmask, uint32 lowmask); @@ -664,9 +663,9 @@ _hash_expandtable(Relation rel, Buffer metabuf) _hash_chgbufaccess(rel, metabuf, HASH_WRITE, HASH_NOLOCK); /* Relocate records to the new bucket */ - _hash_splitbucket(rel, metabuf, buf_nblkno, + _hash_splitbucket(rel, metabuf, old_bucket, new_bucket, - start_oblkno, start_nblkno, + start_oblkno, buf_nblkno, maxbucket, highmask, lowmask); /* Release bucket locks, allowing others to access them */ @@ -747,24 +746,22 @@ _hash_alloc_buckets(Relation rel, BlockNumber firstblock, uint32 nblocks) * touched if it becomes necessary to add or remove overflow pages.) * * In addition, the caller must have created the new bucket's base page, - * which is passed in buffer nbuf, pinned and write-locked. The lock - * and pin are released here. (The API is set up this way because we must - * do _hash_getnewbuf() before releasing the metapage write lock.) + * which is passed in buffer nbuf, pinned and write-locked. That lock and + * pin are released here. (The API is set up this way because we must do + * _hash_getnewbuf() before releasing the metapage write lock. So instead of + * passing the new bucket's start block number, we pass an actual buffer.) */ static void _hash_splitbucket(Relation rel, Buffer metabuf, - Buffer nbuf, Bucket obucket, Bucket nbucket, BlockNumber start_oblkno, - BlockNumber start_nblkno, + Buffer nbuf, uint32 maxbucket, uint32 highmask, uint32 lowmask) { - BlockNumber oblkno; - BlockNumber nblkno; Buffer obuf; Page opage; Page npage; @@ -776,13 +773,10 @@ _hash_splitbucket(Relation rel, * since no one else can be trying to acquire buffer lock on pages of * either bucket. */ - oblkno = start_oblkno; - obuf = _hash_getbuf(rel, oblkno, HASH_WRITE, LH_BUCKET_PAGE); + obuf = _hash_getbuf(rel, start_oblkno, HASH_WRITE, LH_BUCKET_PAGE); opage = BufferGetPage(obuf); oopaque = (HashPageOpaque) PageGetSpecialPointer(opage); - nblkno = start_nblkno; - Assert(nblkno == BufferGetBlockNumber(nbuf)); npage = BufferGetPage(nbuf); /* initialize the new bucket's primary page */ @@ -801,6 +795,7 @@ _hash_splitbucket(Relation rel, */ for (;;) { + BlockNumber oblkno; OffsetNumber ooffnum; OffsetNumber omaxoffnum; OffsetNumber deletable[MaxOffsetNumber]; @@ -847,7 +842,7 @@ _hash_splitbucket(Relation rel, /* chain to a new overflow page */ nbuf = _hash_addovflpage(rel, metabuf, nbuf); npage = BufferGetPage(nbuf); - /* we don't need nblkno or nopaque within the loop */ + /* we don't need nopaque within the loop */ } /* -- 2.40.0