diff --git a/src/backend/storage/freespace/freespace.c b/src/backend/storage/freespace/freespace.c
index 130649601c..e0f79e3522 100644
--- a/src/backend/storage/freespace/freespace.c
+++ b/src/backend/storage/freespace/freespace.c
@@ -30,6 +30,7 @@
 #include "storage/fsm_internals.h"
 #include "storage/lmgr.h"
 #include "storage/smgr.h"
+#include "utils/inval.h"
 #include "utils/memutils.h"
 
 
@@ -167,7 +168,6 @@ GetPageWithFreeSpace(Relation rel, Size spaceNeeded, bool check_fsm_only)
 				 * during bootstrapping or in a recently-started system.
 				 */
 				target_block = nblocks - 1;
-				fsm_clear_local_map(rel);
 				return target_block;
 			}
 			else if (nblocks > 0)
@@ -776,7 +776,10 @@ fsm_extend(Relation rel, BlockNumber fsm_nblocks)
 	if ((rel->rd_smgr->smgr_fsm_nblocks == 0 ||
 		 rel->rd_smgr->smgr_fsm_nblocks == InvalidBlockNumber) &&
 		!smgrexists(rel->rd_smgr, FSM_FORKNUM))
+	{
 		smgrcreate(rel->rd_smgr, FSM_FORKNUM, false);
+		fsm_clear_local_map(rel);
+	}
 
 	fsm_nblocks_now = smgrnblocks(rel->rd_smgr, FSM_FORKNUM);
 
@@ -1175,5 +1178,8 @@ fsm_clear_local_map(Relation rel)
 		rel->fsm_local_map->nblocks = 0;
 		memset(&rel->fsm_local_map->map, FSM_LOCAL_NOT_AVAIL,
 			sizeof(rel->fsm_local_map->map));
+
+		/* Notify other backends that their local maps out of date. */
+		CacheInvalidateRelcache(rel);
 	}
 }
