@@ -489,14 +489,14 @@ SimpleLruReadPage(SlruCtl ctl, int64 pageno, bool write_ok,
489
489
TransactionId xid )
490
490
{
491
491
SlruShared shared = ctl -> shared ;
492
+ LWLock * banklock = SimpleLruGetBankLock (ctl ,pageno );
492
493
493
- Assert (LWLockHeldByMeInMode (SimpleLruGetBankLock ( ctl , pageno ) ,LW_EXCLUSIVE ));
494
+ Assert (LWLockHeldByMeInMode (banklock ,LW_EXCLUSIVE ));
494
495
495
496
/* Outer loop handles restart if we must wait for someone else's I/O */
496
497
for (;;)
497
498
{
498
499
int slotno ;
499
- int bankno ;
500
500
bool ok ;
501
501
502
502
/* See if page already is in memory; if not, pick victim slot */
@@ -539,10 +539,9 @@ SimpleLruReadPage(SlruCtl ctl, int64 pageno, bool write_ok,
539
539
540
540
/* Acquire per-buffer lock (cannot deadlock, see notes at top) */
541
541
LWLockAcquire (& shared -> buffer_locks [slotno ].lock ,LW_EXCLUSIVE );
542
- bankno = SlotGetBankNumber (slotno );
543
542
544
543
/* Release bank lock while doing I/O */
545
- LWLockRelease (& shared -> bank_locks [ bankno ]. lock );
544
+ LWLockRelease (banklock );
546
545
547
546
/* Do the read */
548
547
ok = SlruPhysicalReadPage (ctl ,pageno ,slotno );
@@ -551,7 +550,7 @@ SimpleLruReadPage(SlruCtl ctl, int64 pageno, bool write_ok,
551
550
SimpleLruZeroLSNs (ctl ,slotno );
552
551
553
552
/* Re-acquire bank control lock and update page state */
554
- LWLockAcquire (& shared -> bank_locks [ bankno ]. lock ,LW_EXCLUSIVE );
553
+ LWLockAcquire (banklock ,LW_EXCLUSIVE );
555
554
556
555
Assert (shared -> page_number [slotno ]== pageno &&
557
556
shared -> page_status [slotno ]== SLRU_PAGE_READ_IN_PROGRESS &&
@@ -592,12 +591,13 @@ int
592
591
SimpleLruReadPage_ReadOnly (SlruCtl ctl ,int64 pageno ,TransactionId xid )
593
592
{
594
593
SlruShared shared = ctl -> shared ;
594
+ LWLock * banklock = SimpleLruGetBankLock (ctl ,pageno );
595
595
int bankno = pageno & ctl -> bank_mask ;
596
596
int bankstart = bankno * SLRU_BANK_SIZE ;
597
597
int bankend = bankstart + SLRU_BANK_SIZE ;
598
598
599
599
/* Try to find the page while holding only shared lock */
600
- LWLockAcquire (& shared -> bank_locks [ bankno ]. lock ,LW_SHARED );
600
+ LWLockAcquire (banklock ,LW_SHARED );
601
601
602
602
/* See if page is already in a buffer */
603
603
for (int slotno = bankstart ;slotno < bankend ;slotno ++ )
@@ -617,8 +617,8 @@ SimpleLruReadPage_ReadOnly(SlruCtl ctl, int64 pageno, TransactionId xid)
617
617
}
618
618
619
619
/* 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 );
622
622
623
623
return SimpleLruReadPage (ctl ,pageno , true,xid );
624
624
}
@@ -1167,7 +1167,7 @@ SlruSelectLRUPage(SlruCtl ctl, int64 pageno)
1167
1167
int bankstart = bankno * SLRU_BANK_SIZE ;
1168
1168
int bankend = bankstart + SLRU_BANK_SIZE ;
1169
1169
1170
- Assert (LWLockHeldByMe (& shared -> bank_locks [ bankno ]. lock ));
1170
+ Assert (LWLockHeldByMe (SimpleLruGetBankLock ( ctl , pageno ) ));
1171
1171
1172
1172
/* See if page already has a buffer assigned */
1173
1173
for (int slotno = 0 ;slotno < shared -> num_slots ;slotno ++ )