if (buffer == InvalidBuffer)
{
Assert(extended_by == 0);
- buffer = ReadBuffer_common(bmr.rel, bmr.smgr, 0,
+ buffer = ReadBuffer_common(bmr.rel, bmr.smgr, bmr.relpersistence,
fork, extend_to - 1, mode, strategy);
}
Assert(blockNum != P_NEW);
- /*
- * If there is no Relation it usually implies recovery and thus permanent,
- * but we take an argument because CreateAndCopyRelationData can reach us
- * with only an SMgrRelation for an unlogged relation that we don't want
- * to flag with BM_PERMANENT.
- */
if (rel)
persistence = rel->rd_rel->relpersistence;
- else if (smgr_persistence == 0)
- persistence = RELPERSISTENCE_PERMANENT;
else
persistence = smgr_persistence;
struct ReadBuffersOperation
{
- /*
- * The following members should be set by the caller. If only smgr is
- * provided without rel, then smgr_persistence can be set to override the
- * default assumption of RELPERSISTENCE_PERMANENT.
- */
- Relation rel;
+ /* The following members should be set by the caller. */
+ Relation rel; /* optional */
struct SMgrRelationData *smgr;
- char smgr_persistence;
+ char smgr_persistence; /* optional if rel != NULL */
ForkNumber forknum;
BufferAccessStrategy strategy;