@ -137,7 +137,7 @@ static void vm_extend(Relation rel, BlockNumber vm_nblocks);
* any I / O . Returns true if any bits have been cleared and false otherwise .
*/
bool
visibilitymap_clear ( Relation rel , BlockNumber heapBlk , Buffer buf , uint8 flags )
visibilitymap_clear ( Relation rel , BlockNumber heapBlk , Buffer vm buf, uint8 flags )
{
BlockNumber mapBlock = HEAPBLK_TO_MAPBLOCK ( heapBlk ) ;
int mapByte = HEAPBLK_TO_MAPBYTE ( heapBlk ) ;
@ -152,21 +152,21 @@ visibilitymap_clear(Relation rel, BlockNumber heapBlk, Buffer buf, uint8 flags)
elog ( DEBUG1 , " vm_clear %s %d " , RelationGetRelationName ( rel ) , heapBlk ) ;
# endif
if ( ! BufferIsValid ( buf ) | | BufferGetBlockNumber ( buf ) ! = mapBlock )
if ( ! BufferIsValid ( vm buf) | | BufferGetBlockNumber ( vm buf) ! = mapBlock )
elog ( ERROR , " wrong buffer passed to visibilitymap_clear " ) ;
LockBuffer ( buf , BUFFER_LOCK_EXCLUSIVE ) ;
map = PageGetContents ( BufferGetPage ( buf ) ) ;
LockBuffer ( vm buf, BUFFER_LOCK_EXCLUSIVE ) ;
map = PageGetContents ( BufferGetPage ( vm buf) ) ;
if ( map [ mapByte ] & mask )
{
map [ mapByte ] & = ~ mask ;
MarkBufferDirty ( buf ) ;
MarkBufferDirty ( vm buf) ;
cleared = true ;
}
LockBuffer ( buf , BUFFER_LOCK_UNLOCK ) ;
LockBuffer ( vm buf, BUFFER_LOCK_UNLOCK ) ;
return cleared ;
}
@ -180,43 +180,43 @@ visibilitymap_clear(Relation rel, BlockNumber heapBlk, Buffer buf, uint8 flags)
* shouldn ' t hold a lock on the heap page while doing that . Then , call
* visibilitymap_set to actually set the bit .
*
* On entry , * buf should be InvalidBuffer or a valid buffer returned by
* On entry , * vm buf should be InvalidBuffer or a valid buffer returned by
* an earlier call to visibilitymap_pin or visibilitymap_get_status on the same
* relation . On return , * buf is a valid buffer with the map page containing
* relation . On return , * vm buf is a valid buffer with the map page containing
* the bit for heapBlk .
*
* If the page doesn ' t exist in the map file yet , it is extended .
*/
void
visibilitymap_pin ( Relation rel , BlockNumber heapBlk , Buffer * buf )
visibilitymap_pin ( Relation rel , BlockNumber heapBlk , Buffer * vm buf)
{
BlockNumber mapBlock = HEAPBLK_TO_MAPBLOCK ( heapBlk ) ;
/* Reuse the old pinned buffer if possible */
if ( BufferIsValid ( * buf ) )
if ( BufferIsValid ( * vm buf) )
{
if ( BufferGetBlockNumber ( * buf ) = = mapBlock )
if ( BufferGetBlockNumber ( * vm buf) = = mapBlock )
return ;
ReleaseBuffer ( * buf ) ;
ReleaseBuffer ( * vm buf) ;
}
* buf = vm_readbuf ( rel , mapBlock , true ) ;
* vm buf = vm_readbuf ( rel , mapBlock , true ) ;
}
/*
* visibilitymap_pin_ok - do we already have the correct page pinned ?
*
* On entry , buf should be InvalidBuffer or a valid buffer returned by
* On entry , vm buf should be InvalidBuffer or a valid buffer returned by
* an earlier call to visibilitymap_pin or visibilitymap_get_status on the same
* relation . The return value indicates whether the buffer covers the
* given heapBlk .
*/
bool
visibilitymap_pin_ok ( BlockNumber heapBlk , Buffer buf )
visibilitymap_pin_ok ( BlockNumber heapBlk , Buffer vm buf)
{
BlockNumber mapBlock = HEAPBLK_TO_MAPBLOCK ( heapBlk ) ;
return BufferIsValid ( buf ) & & BufferGetBlockNumber ( buf ) = = mapBlock ;
return BufferIsValid ( vm buf) & & BufferGetBlockNumber ( vm buf) = = mapBlock ;
}
/*
@ -314,11 +314,11 @@ visibilitymap_set(Relation rel, BlockNumber heapBlk, Buffer heapBuf,
* Are all tuples on heapBlk visible to all or are marked frozen , according
* to the visibility map ?
*
* On entry , * buf should be InvalidBuffer or a valid buffer returned by an
* On entry , * vm buf should be InvalidBuffer or a valid buffer returned by an
* earlier call to visibilitymap_pin or visibilitymap_get_status on the same
* relation . On return , * buf is a valid buffer with the map page containing
* relation . On return , * vm buf is a valid buffer with the map page containing
* the bit for heapBlk , or InvalidBuffer . The caller is responsible for
* releasing * buf after it ' s done testing and setting bits .
* releasing * vm buf after it ' s done testing and setting bits .
*
* NOTE : This function is typically called without a lock on the heap page ,
* so somebody else could change the bit just after we look at it . In fact ,
@ -328,7 +328,7 @@ visibilitymap_set(Relation rel, BlockNumber heapBlk, Buffer heapBuf,
* all concurrency issues !
*/
uint8
visibilitymap_get_status ( Relation rel , BlockNumber heapBlk , Buffer * buf )
visibilitymap_get_status ( Relation rel , BlockNumber heapBlk , Buffer * vm buf)
{
BlockNumber mapBlock = HEAPBLK_TO_MAPBLOCK ( heapBlk ) ;
uint32 mapByte = HEAPBLK_TO_MAPBYTE ( heapBlk ) ;
@ -341,23 +341,23 @@ visibilitymap_get_status(Relation rel, BlockNumber heapBlk, Buffer *buf)
# endif
/* Reuse the old pinned buffer if possible */
if ( BufferIsValid ( * buf ) )
if ( BufferIsValid ( * vm buf) )
{
if ( BufferGetBlockNumber ( * buf ) ! = mapBlock )
if ( BufferGetBlockNumber ( * vm buf) ! = mapBlock )
{
ReleaseBuffer ( * buf ) ;
* buf = InvalidBuffer ;
ReleaseBuffer ( * vm buf) ;
* vm buf = InvalidBuffer ;
}
}
if ( ! BufferIsValid ( * buf ) )
if ( ! BufferIsValid ( * vm buf) )
{
* buf = vm_readbuf ( rel , mapBlock , false ) ;
if ( ! BufferIsValid ( * buf ) )
* vm buf = vm_readbuf ( rel , mapBlock , false ) ;
if ( ! BufferIsValid ( * vm buf) )
return false ;
}
map = PageGetContents ( BufferGetPage ( * buf ) ) ;
map = PageGetContents ( BufferGetPage ( * vm buf) ) ;
/*
* A single byte read is atomic . There could be memory - ordering effects