diff -rdup rrdtool-trunk/src/rrd_open.c rrdtool-trunk.DNANs/src/rrd_open.c
--- rrdtool-trunk/src/rrd_open.c	2007-06-01 17:02:29.000000000 +0200
+++ rrdtool-trunk.DNANs/src/rrd_open.c	2007-06-01 16:54:35.000000000 +0200
@@ -253,6 +253,7 @@ rrd_file_t *rrd_open(
     }
     rrd_file->file_start = data;
     if (rdwr & RRD_CREAT) {
+        memset(data, DNAN, newfile_size - 1);
         goto out_done;
     }
 #endif
diff -rdup rrdtool-trunk/src/rrd_resize.c rrdtool-trunk.DNANs/src/rrd_resize.c
--- rrdtool-trunk/src/rrd_resize.c	2007-06-01 17:02:41.000000000 +0200
+++ rrdtool-trunk.DNANs/src/rrd_resize.c	2007-06-01 16:54:44.000000000 +0200
@@ -169,12 +169,17 @@ int rrd_resize(
             rrd_write(rrd_out_file, &buffer, sizeof(rrd_value_t) * 1);
             l--;
         }
+#ifndef HAVE_MMAP
         buffer = DNAN;
         l = rrdnew.stat_head->ds_cnt * modify;
         while (l > 0) {
             rrd_write(rrd_out_file, &buffer, sizeof(rrd_value_t) * 1);
             l--;
         }
+#else
+	/* for the mmap case, we did already fill the whole new file with DNAN
+	 * before we copied the old values, so nothing to do here.  */
+#endif
     } else {
         /* Removing rows. Normally this would be just after the cursor
          ** however this may also mean that we wrap to the beginning of

