diff --git a/src/backend/access/nbtree/nbtsort.c b/src/backend/access/nbtree/nbtsort.c
index aa1bb0028df8f465d1f32b9752cdcdaf2777a8d0..d8a3a248800a501f6030fb6842d2401657196c27 100644
--- a/src/backend/access/nbtree/nbtsort.c
+++ b/src/backend/access/nbtree/nbtsort.c
@@ -56,7 +56,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/access/nbtree/nbtsort.c,v 1.96 2005/11/22 18:17:06 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/access/nbtree/nbtsort.c,v 1.97 2006/01/07 22:45:41 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -271,6 +271,9 @@ _bt_blnewpage(uint32 level)
 static void
 _bt_blwritepage(BTWriteState *wstate, Page page, BlockNumber blkno)
 {
+	/* Ensure rd_smgr is open (could have been closed by relcache flush!) */
+	RelationOpenSmgr(wstate->index);
+
 	/* XLOG stuff */
 	if (wstate->btws_use_wal)
 	{
@@ -818,5 +821,8 @@ _bt_load(BTWriteState *wstate, BTSpool *btspool, BTSpool *btspool2)
 	 * occurs.
 	 */
 	if (!wstate->index->rd_istemp)
+	{
+		RelationOpenSmgr(wstate->index);
 		smgrimmedsync(wstate->index->rd_smgr);
+	}
 }