Index: src/rrd_update.c
===================================================================
--- src/rrd_update.c	(revision 1093)
+++ src/rrd_update.c	(working copy)
@@ -68,7 +68,7 @@ static inline void normalize_time(
     }
 }
 
-static info_t *write_RRA_row(
+static inline info_t *write_RRA_row(
     rrd_file_t *rrd_file,
     rrd_t *rrd,
     unsigned long rra_idx,
@@ -104,7 +104,7 @@ static info_t *write_RRA_row(
         if (rrd_write
             (rrd_file,
              &(rrd->cdp_prep[cdp_idx].scratch[CDP_scratch_idx].u_val),
-             sizeof(rrd_value_t) * 1) != sizeof(rrd_value_t) * 1) {
+             sizeof(rrd_value_t)) != sizeof(rrd_value_t)) {
             rrd_set_error("writing rrd: %s", rrd_strerror(errno));
             return 0;
         }
Index: src/rrd_open.c
===================================================================
--- src/rrd_open.c	(revision 1093)
+++ src/rrd_open.c	(working copy)
@@ -73,7 +73,7 @@
 //#define ONE_PAGE 1
 /* Avoid calling madvise on areas that were already hinted. May be benefical if
  * your syscalls are very slow */
-//#define CHECK_MADVISE_OVERLAPS 1
+#define CHECK_MADVISE_OVERLAPS 1
 
 #ifdef HAVE_MMAP
 #define __rrd_read(dst, dst_t, cnt) \
@@ -247,23 +247,21 @@ rrd_file_t *rrd_open(
         goto out_done;
     }
     /* We do not need to read anything in for the moment */
-#ifndef ONE_PAGE
-    _madvise(data, rrd_file->file_len, MADV_DONTNEED);
-//    _madvise(data, rrd_file->file_len, MADV_RANDOM);
-#else
-/* alternatively: keep 2 pages worth of data, likely headers,
+# ifndef ONE_PAGE
+    _madvise(data, rrd_file->file_len, MADV_RANDOM);
+# else
+/* alternatively: keep 1 page worth of data, likely headers,
  * don't need the rest.  */
     _madvise(data, _page_size, MADV_WILLNEED | MADV_SEQUENTIAL);
     _madvise(data + _page_size, (rrd_file->file_len >= _page_size)
-             ? rrd_file->file_len - _page_size : 0, MADV_DONTNEED);
-#endif
+             ? rrd_file->file_len - _page_size : 0, MADV_RANDOM);
+# endif
 #endif
 
-#if defined USE_MADVISE && !defined ONE_PAGE
+#if 0 && defined USE_MADVISE && !defined ONE_PAGE
     /* the stat_head will be needed soonish, so hint accordingly */
-// too finegrained to calc the individual sizes, just keep 2 pages worth of hdr
     _madvise(data + PAGE_ALIGN_DOWN(offset), PAGE_ALIGN(sizeof(stat_head_t)),
-             MADV_WILLNEED);
+             MADV_WILLNEED | MADV_SEQUENTIAL);
 
 #endif
 
@@ -288,7 +286,7 @@ rrd_file_t *rrd_open(
                       rrd->stat_head->version);
         goto out_nullify_head;
     }
-#if defined USE_MADVISE && !defined ONE_PAGE
+#if 0 && defined USE_MADVISE && !defined ONE_PAGE
     /* the ds_def will be needed soonish, so hint accordingly */
     _madvise(data + PAGE_ALIGN_DOWN(offset),
              PAGE_ALIGN(sizeof(ds_def_t) * rrd->stat_head->ds_cnt),
@@ -297,7 +295,7 @@ rrd_file_t *rrd_open(
     __rrd_read(rrd->ds_def, ds_def_t,
                rrd->stat_head->ds_cnt);
 
-#if defined USE_MADVISE && !defined ONE_PAGE
+#if 0 && defined USE_MADVISE && !defined ONE_PAGE
     /* the rra_def will be needed soonish, so hint accordingly */
     _madvise(data + PAGE_ALIGN_DOWN(offset),
              PAGE_ALIGN(sizeof(rra_def_t) * rrd->stat_head->rra_cnt),
@@ -321,7 +319,7 @@ rrd_file_t *rrd_open(
 #endif
         rrd->live_head->last_up_usec = 0;
     } else {
-#if defined USE_MADVISE && !defined ONE_PAGE
+#if 0 && defined USE_MADVISE && !defined ONE_PAGE
         /* the live_head will be needed soonish, so hint accordingly */
         _madvise(data + PAGE_ALIGN_DOWN(offset),
                  PAGE_ALIGN(sizeof(live_head_t)), MADV_WILLNEED);
@@ -400,19 +398,19 @@ int rrd_close(
 #endif                          /* DEBUG */
 
 #ifdef USE_MADVISE
-#ifdef ONE_PAGE
+# ifdef ONE_PAGE
     /* Keep headers around, round up to next page boundary.  */
     ret =
         PAGE_ALIGN(rrd_file->header_len % _page_size + rrd_file->header_len);
     if (rrd_file->file_len > ret)
         _madvise(rrd_file->file_start + ret,
                  rrd_file->file_len - ret, MADV_DONTNEED);
-#else
+# else
     /* ignoring errors from RRDs that are smaller then the file_len+rounding */
     _madvise(rrd_file->file_start + PAGE_ALIGN_DOWN(rrd_file->header_len),
              rrd_file->file_len - PAGE_ALIGN(rrd_file->header_len),
              MADV_DONTNEED);
-#endif
+# endif
 #endif
 #ifdef HAVE_MMAP
     ret = munmap(rrd_file->file_start, rrd_file->file_len);
@@ -467,13 +465,13 @@ inline off_t rrd_tell(
 /* read count bytes into buffer buf, starting at rrd_file->pos.
  * Returns the number of bytes read.  */
 
-ssize_t rrd_read(
+inline ssize_t rrd_read(
     rrd_file_t *rrd_file,
     void *buf,
     size_t count)
 {
 #ifdef HAVE_MMAP
-    buf = memmove(buf, rrd_file->file_start + rrd_file->pos, count);
+    buf = memcpy(buf, rrd_file->file_start + rrd_file->pos, count);
     rrd_file->pos += count; /* mimmic read() semantics */
     return count;
 #else
@@ -491,16 +489,20 @@ ssize_t rrd_read(
  * rrd_file->pos of rrd_file->fd.
  * Returns the number of bytes written.  */
 
-ssize_t rrd_write(
+inline ssize_t rrd_write(
     rrd_file_t *rrd_file,
     const void *buf,
     size_t count)
 {
 #ifdef HAVE_MMAP
-    memmove(rrd_file->file_start + rrd_file->pos, buf, count);
+    memcpy(rrd_file->file_start + rrd_file->pos, buf, count);
+    rrd_file->pos += count;
     return count;       /* mimmic write() semantics */
 #else
-    return write(rrd_file->fd, buf, count);
+    ssize_t _sz = write(rrd_file->fd, buf, count);
+    if (_sz >= 0)
+        rrd_file->pos += _sz;
+    return _sz;
 #endif
 }
 
