From: Peter Geoghegan Date: Tue, 26 Feb 2019 01:47:43 +0000 (-0800) Subject: Remove unneeded argument from _bt_getstackbuf(). X-Git-Tag: REL_12_BETA1~673 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2ab23445bc6af517bddb40d8429146d8ff8d7ff4;p=postgresql Remove unneeded argument from _bt_getstackbuf(). _bt_getstackbuf() is called at exactly two points following commit efada2b8e92 (one call site is concerned with page splits, while the other is concerned with page deletion). The parent buffer returned by _bt_getstackbuf() is write-locked in both cases. Remove the 'access' argument and make _bt_getstackbuf() assume that callers require a write-lock. --- diff --git a/src/backend/access/nbtree/nbtinsert.c b/src/backend/access/nbtree/nbtinsert.c index 5c2b8034f5..a4d46a0f44 100644 --- a/src/backend/access/nbtree/nbtinsert.c +++ b/src/backend/access/nbtree/nbtinsert.c @@ -1886,7 +1886,7 @@ _bt_insert_parent(Relation rel, * 05/27/97 */ stack->bts_btentry = bknum; - pbuf = _bt_getstackbuf(rel, stack, BT_WRITE); + pbuf = _bt_getstackbuf(rel, stack); /* * Now we can unlock the right child. The left child will be unlocked @@ -1976,10 +1976,11 @@ _bt_finish_split(Relation rel, Buffer lbuf, BTStack stack) * * Adjusts bts_blkno & bts_offset if changed. * - * Returns InvalidBuffer if item not found (should not happen). + * Returns write-locked buffer, or InvalidBuffer if item not found + * (should not happen). */ Buffer -_bt_getstackbuf(Relation rel, BTStack stack, int access) +_bt_getstackbuf(Relation rel, BTStack stack) { BlockNumber blkno; OffsetNumber start; @@ -1993,11 +1994,11 @@ _bt_getstackbuf(Relation rel, BTStack stack, int access) Page page; BTPageOpaque opaque; - buf = _bt_getbuf(rel, blkno, access); + buf = _bt_getbuf(rel, blkno, BT_WRITE); page = BufferGetPage(buf); opaque = (BTPageOpaque) PageGetSpecialPointer(page); - if (access == BT_WRITE && P_INCOMPLETE_SPLIT(opaque)) + if (P_INCOMPLETE_SPLIT(opaque)) { _bt_finish_split(rel, buf, stack->bts_parent); continue; diff --git a/src/backend/access/nbtree/nbtpage.c b/src/backend/access/nbtree/nbtpage.c index 300daf915d..9c785bca95 100644 --- a/src/backend/access/nbtree/nbtpage.c +++ b/src/backend/access/nbtree/nbtpage.c @@ -1153,7 +1153,7 @@ _bt_lock_branch_parent(Relation rel, BlockNumber child, BTStack stack, * if needed) */ stack->bts_btentry = child; - pbuf = _bt_getstackbuf(rel, stack, BT_WRITE); + pbuf = _bt_getstackbuf(rel, stack); if (pbuf == InvalidBuffer) elog(ERROR, "failed to re-find parent key in index \"%s\" for deletion target page %u", RelationGetRelationName(rel), child); diff --git a/src/include/access/nbtree.h b/src/include/access/nbtree.h index 4fb92d60a1..60622ea790 100644 --- a/src/include/access/nbtree.h +++ b/src/include/access/nbtree.h @@ -528,7 +528,7 @@ extern void _bt_parallel_advance_array_keys(IndexScanDesc scan); */ extern bool _bt_doinsert(Relation rel, IndexTuple itup, IndexUniqueCheck checkUnique, Relation heapRel); -extern Buffer _bt_getstackbuf(Relation rel, BTStack stack, int access); +extern Buffer _bt_getstackbuf(Relation rel, BTStack stack); extern void _bt_finish_split(Relation rel, Buffer bbuf, BTStack stack); /*