@@ -489,14 +489,14 @@ SimpleLruReadPage(SlruCtl ctl, int64 pageno, bool write_ok,
489489 TransactionId xid )
490490{
491491 SlruShared shared = ctl -> shared ;
492+ LWLock * banklock = SimpleLruGetBankLock (ctl , pageno );
492493
493- Assert (LWLockHeldByMeInMode (SimpleLruGetBankLock ( ctl , pageno ) , LW_EXCLUSIVE ));
494+ Assert (LWLockHeldByMeInMode (banklock , LW_EXCLUSIVE ));
494495
495496 /* Outer loop handles restart if we must wait for someone else's I/O */
496497 for (;;)
497498 {
498499 int slotno ;
499- int bankno ;
500500 bool ok ;
501501
502502 /* See if page already is in memory; if not, pick victim slot */
@@ -539,10 +539,9 @@ SimpleLruReadPage(SlruCtl ctl, int64 pageno, bool write_ok,
539539
540540 /* Acquire per-buffer lock (cannot deadlock, see notes at top) */
541541 LWLockAcquire (& shared -> buffer_locks [slotno ].lock , LW_EXCLUSIVE );
542- bankno = SlotGetBankNumber (slotno );
543542
544543 /* Release bank lock while doing I/O */
545- LWLockRelease (& shared -> bank_locks [ bankno ]. lock );
544+ LWLockRelease (banklock );
546545
547546 /* Do the read */
548547 ok = SlruPhysicalReadPage (ctl , pageno , slotno );
@@ -551,7 +550,7 @@ SimpleLruReadPage(SlruCtl ctl, int64 pageno, bool write_ok,
551550 SimpleLruZeroLSNs (ctl , slotno );
552551
553552 /* Re-acquire bank control lock and update page state */
554- LWLockAcquire (& shared -> bank_locks [ bankno ]. lock , LW_EXCLUSIVE );
553+ LWLockAcquire (banklock , LW_EXCLUSIVE );
555554
556555 Assert (shared -> page_number [slotno ] == pageno &&
557556 shared -> page_status [slotno ] == SLRU_PAGE_READ_IN_PROGRESS &&
@@ -592,12 +591,13 @@ int
592591SimpleLruReadPage_ReadOnly (SlruCtl ctl , int64 pageno , TransactionId xid )
593592{
594593 SlruShared shared = ctl -> shared ;
594+ LWLock * banklock = SimpleLruGetBankLock (ctl , pageno );
595595 int bankno = pageno & ctl -> bank_mask ;
596596 int bankstart = bankno * SLRU_BANK_SIZE ;
597597 int bankend = bankstart + SLRU_BANK_SIZE ;
598598
599599 /* Try to find the page while holding only shared lock */
600- LWLockAcquire (& shared -> bank_locks [ bankno ]. lock , LW_SHARED );
600+ LWLockAcquire (banklock , LW_SHARED );
601601
602602 /* See if page is already in a buffer */
603603 for (int slotno = bankstart ; slotno < bankend ; slotno ++ )
@@ -617,8 +617,8 @@ SimpleLruReadPage_ReadOnly(SlruCtl ctl, int64 pageno, TransactionId xid)
617617 }
618618
619619 /* No luck, so switch to normal exclusive lock and do regular read */
620- LWLockRelease (& shared -> bank_locks [ bankno ]. lock );
621- LWLockAcquire (& shared -> bank_locks [ bankno ]. lock , LW_EXCLUSIVE );
620+ LWLockRelease (banklock );
621+ LWLockAcquire (banklock , LW_EXCLUSIVE );
622622
623623 return SimpleLruReadPage (ctl , pageno , true, xid );
624624}
@@ -1167,7 +1167,7 @@ SlruSelectLRUPage(SlruCtl ctl, int64 pageno)
11671167 int bankstart = bankno * SLRU_BANK_SIZE ;
11681168 int bankend = bankstart + SLRU_BANK_SIZE ;
11691169
1170- Assert (LWLockHeldByMe (& shared -> bank_locks [ bankno ]. lock ));
1170+ Assert (LWLockHeldByMe (SimpleLruGetBankLock ( ctl , pageno ) ));
11711171
11721172 /* See if page already has a buffer assigned */
11731173 for (int slotno = 0 ; slotno < shared -> num_slots ; slotno ++ )
0 commit comments