fsm_readbuf() used to always do an smgrexists() when reading a buffer
beyond the known file size. That currently implies closing the md.c
handle, loosing all the data cached therein. Change this to only
check for file existance when not already known to be larger than 0
blocks.
Author: Andres Freund
Reviewed-By:
Discussion: https://postgr.es/m/
Backpatch:
* not on extension.)
*/
if (rel->rd_smgr->smgr_fsm_nblocks == InvalidBlockNumber ||
- blkno >= rel->rd_smgr->smgr_fsm_nblocks)
+ rel->rd_smgr->smgr_fsm_nblocks == 0)
{
if (smgrexists(rel->rd_smgr, FSM_FORKNUM))
rel->rd_smgr->smgr_fsm_nblocks = smgrnblocks(rel->rd_smgr,
else
rel->rd_smgr->smgr_fsm_nblocks = 0;
}
+ else if (blkno >= rel->rd_smgr->smgr_fsm_nblocks)
+ rel->rd_smgr->smgr_fsm_nblocks = smgrnblocks(rel->rd_smgr,
+ FSM_FORKNUM);
/* Handle requests beyond EOF */
if (blkno >= rel->rd_smgr->smgr_fsm_nblocks)