@@ -883,14 +883,11 @@ ExtendBufferedRelBy(BufferManagerRelation bmr,
883883 uint32 * extended_by )
884884{
885885 Assert ((bmr .rel != NULL ) != (bmr .smgr != NULL ));
886- Assert (bmr .smgr == NULL || bmr .relpersistence != 0 );
886+ Assert (bmr .smgr == NULL || bmr .relpersistence != '\0' );
887887 Assert (extend_by > 0 );
888888
889- if (bmr .smgr == NULL )
890- {
891- bmr .smgr = RelationGetSmgr (bmr .rel );
889+ if (bmr .relpersistence == '\0' )
892890 bmr .relpersistence = bmr .rel -> rd_rel -> relpersistence ;
893- }
894891
895892 return ExtendBufferedRelCommon (bmr , fork , strategy , flags ,
896893 extend_by , InvalidBlockNumber ,
@@ -919,30 +916,27 @@ ExtendBufferedRelTo(BufferManagerRelation bmr,
919916 Buffer buffers [64 ];
920917
921918 Assert ((bmr .rel != NULL ) != (bmr .smgr != NULL ));
922- Assert (bmr .smgr == NULL || bmr .relpersistence != 0 );
919+ Assert (bmr .smgr == NULL || bmr .relpersistence != '\0' );
923920 Assert (extend_to != InvalidBlockNumber && extend_to > 0 );
924921
925- if (bmr .smgr == NULL )
926- {
927- bmr .smgr = RelationGetSmgr (bmr .rel );
922+ if (bmr .relpersistence == '\0' )
928923 bmr .relpersistence = bmr .rel -> rd_rel -> relpersistence ;
929- }
930924
931925 /*
932926 * If desired, create the file if it doesn't exist. If
933927 * smgr_cached_nblocks[fork] is positive then it must exist, no need for
934928 * an smgrexists call.
935929 */
936930 if ((flags & EB_CREATE_FORK_IF_NEEDED ) &&
937- (bmr . smgr -> smgr_cached_nblocks [fork ] == 0 ||
938- bmr . smgr -> smgr_cached_nblocks [fork ] == InvalidBlockNumber ) &&
939- !smgrexists (bmr . smgr , fork ))
931+ (BMR_GET_SMGR ( bmr ) -> smgr_cached_nblocks [fork ] == 0 ||
932+ BMR_GET_SMGR ( bmr ) -> smgr_cached_nblocks [fork ] == InvalidBlockNumber ) &&
933+ !smgrexists (BMR_GET_SMGR ( bmr ) , fork ))
940934 {
941935 LockRelationForExtension (bmr .rel , ExclusiveLock );
942936
943937 /* recheck, fork might have been created concurrently */
944- if (!smgrexists (bmr . smgr , fork ))
945- smgrcreate (bmr . smgr , fork , flags & EB_PERFORMING_RECOVERY );
938+ if (!smgrexists (BMR_GET_SMGR ( bmr ) , fork ))
939+ smgrcreate (BMR_GET_SMGR ( bmr ) , fork , flags & EB_PERFORMING_RECOVERY );
946940
947941 UnlockRelationForExtension (bmr .rel , ExclusiveLock );
948942 }
@@ -952,13 +946,13 @@ ExtendBufferedRelTo(BufferManagerRelation bmr,
952946 * kernel.
953947 */
954948 if (flags & EB_CLEAR_SIZE_CACHE )
955- bmr . smgr -> smgr_cached_nblocks [fork ] = InvalidBlockNumber ;
949+ BMR_GET_SMGR ( bmr ) -> smgr_cached_nblocks [fork ] = InvalidBlockNumber ;
956950
957951 /*
958952 * Estimate how many pages we'll need to extend by. This avoids acquiring
959953 * unnecessarily many victim buffers.
960954 */
961- current_size = smgrnblocks (bmr . smgr , fork );
955+ current_size = smgrnblocks (BMR_GET_SMGR ( bmr ) , fork );
962956
963957 /*
964958 * Since no-one else can be looking at the page contents yet, there is no
@@ -1002,7 +996,7 @@ ExtendBufferedRelTo(BufferManagerRelation bmr,
1002996 if (buffer == InvalidBuffer )
1003997 {
1004998 Assert (extended_by == 0 );
1005- buffer = ReadBuffer_common (bmr .rel , bmr . smgr , bmr .relpersistence ,
999+ buffer = ReadBuffer_common (bmr .rel , BMR_GET_SMGR ( bmr ) , bmr .relpersistence ,
10061000 fork , extend_to - 1 , mode , strategy );
10071001 }
10081002
@@ -2540,10 +2534,10 @@ ExtendBufferedRelCommon(BufferManagerRelation bmr,
25402534 BlockNumber first_block ;
25412535
25422536 TRACE_POSTGRESQL_BUFFER_EXTEND_START (fork ,
2543- bmr . smgr -> smgr_rlocator .locator .spcOid ,
2544- bmr . smgr -> smgr_rlocator .locator .dbOid ,
2545- bmr . smgr -> smgr_rlocator .locator .relNumber ,
2546- bmr . smgr -> smgr_rlocator .backend ,
2537+ BMR_GET_SMGR ( bmr ) -> smgr_rlocator .locator .spcOid ,
2538+ BMR_GET_SMGR ( bmr ) -> smgr_rlocator .locator .dbOid ,
2539+ BMR_GET_SMGR ( bmr ) -> smgr_rlocator .locator .relNumber ,
2540+ BMR_GET_SMGR ( bmr ) -> smgr_rlocator .backend ,
25472541 extend_by );
25482542
25492543 if (bmr .relpersistence == RELPERSISTENCE_TEMP )
@@ -2557,10 +2551,10 @@ ExtendBufferedRelCommon(BufferManagerRelation bmr,
25572551 * extended_by = extend_by ;
25582552
25592553 TRACE_POSTGRESQL_BUFFER_EXTEND_DONE (fork ,
2560- bmr . smgr -> smgr_rlocator .locator .spcOid ,
2561- bmr . smgr -> smgr_rlocator .locator .dbOid ,
2562- bmr . smgr -> smgr_rlocator .locator .relNumber ,
2563- bmr . smgr -> smgr_rlocator .backend ,
2554+ BMR_GET_SMGR ( bmr ) -> smgr_rlocator .locator .spcOid ,
2555+ BMR_GET_SMGR ( bmr ) -> smgr_rlocator .locator .dbOid ,
2556+ BMR_GET_SMGR ( bmr ) -> smgr_rlocator .locator .relNumber ,
2557+ BMR_GET_SMGR ( bmr ) -> smgr_rlocator .backend ,
25642558 * extended_by ,
25652559 first_block );
25662560
@@ -2626,9 +2620,9 @@ ExtendBufferedRelShared(BufferManagerRelation bmr,
26262620 * kernel.
26272621 */
26282622 if (flags & EB_CLEAR_SIZE_CACHE )
2629- bmr . smgr -> smgr_cached_nblocks [fork ] = InvalidBlockNumber ;
2623+ BMR_GET_SMGR ( bmr ) -> smgr_cached_nblocks [fork ] = InvalidBlockNumber ;
26302624
2631- first_block = smgrnblocks (bmr . smgr , fork );
2625+ first_block = smgrnblocks (BMR_GET_SMGR ( bmr ) , fork );
26322626
26332627 /*
26342628 * Now that we have the accurate relation size, check if the caller wants
@@ -2666,7 +2660,7 @@ ExtendBufferedRelShared(BufferManagerRelation bmr,
26662660 ereport (ERROR ,
26672661 (errcode (ERRCODE_PROGRAM_LIMIT_EXCEEDED ),
26682662 errmsg ("cannot extend relation %s beyond %u blocks" ,
2669- relpath (bmr . smgr -> smgr_rlocator , fork ).str ,
2663+ relpath (BMR_GET_SMGR ( bmr ) -> smgr_rlocator , fork ).str ,
26702664 MaxBlockNumber )));
26712665
26722666 /*
@@ -2688,7 +2682,8 @@ ExtendBufferedRelShared(BufferManagerRelation bmr,
26882682 ResourceOwnerEnlarge (CurrentResourceOwner );
26892683 ReservePrivateRefCountEntry ();
26902684
2691- InitBufferTag (& tag , & bmr .smgr -> smgr_rlocator .locator , fork , first_block + i );
2685+ InitBufferTag (& tag , & BMR_GET_SMGR (bmr )-> smgr_rlocator .locator , fork ,
2686+ first_block + i );
26922687 hash = BufTableHashCode (& tag );
26932688 partition_lock = BufMappingPartitionLock (hash );
26942689
@@ -2730,7 +2725,7 @@ ExtendBufferedRelShared(BufferManagerRelation bmr,
27302725 ereport (ERROR ,
27312726 (errmsg ("unexpected data beyond EOF in block %u of relation \"%s\"" ,
27322727 existing_hdr -> tag .blockNum ,
2733- relpath (bmr . smgr -> smgr_rlocator , fork ).str )));
2728+ relpath (BMR_GET_SMGR ( bmr ) -> smgr_rlocator , fork ).str )));
27342729
27352730 /*
27362731 * We *must* do smgr[zero]extend before succeeding, else the page
@@ -2787,7 +2782,7 @@ ExtendBufferedRelShared(BufferManagerRelation bmr,
27872782 *
27882783 * We don't need to set checksum for all-zero pages.
27892784 */
2790- smgrzeroextend (bmr . smgr , fork , first_block , extend_by , false);
2785+ smgrzeroextend (BMR_GET_SMGR ( bmr ) , fork , first_block , extend_by , false);
27912786
27922787 /*
27932788 * Release the file-extension lock; it's now OK for someone else to extend
0 commit comments