diff --git a/src/rrd_update.c b/src/rrd_update.c
index 5f27c2f966a66784e50bf5d1a7193f9177d3095e..7a73fdfa2600e53c79685bb68ab6516ab48693f8 100644 (file)
--- a/src/rrd_update.c
+++ b/src/rrd_update.c
#include <sys/types.h>
#include <fcntl.h>
#ifdef HAVE_MMAP
- #include <sys/mman.h>
+# include <sys/mman.h>
#endif
#if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__CYGWIN32__)
@@ -427,6 +427,11 @@ _rrd_update(const char *filename, const char *tmplt, int argc, const char **argv
fclose(rrd_file);
return(-1);
}
+#ifdef HAVE_MADVISE
+ /* when we use mmaping we tell the kernel the mmap equivalent
+ of POSIX_FADV_RANDOM */
+ madvise(rrd_mmaped_file,rrd_filesize,POSIX_MADV_RANDOM);
+#endif
#endif
/* loop through the arguments. */
for(arg_i=0; arg_i<argc;arg_i++) {
@@ -1399,20 +1404,6 @@ _rrd_update(const char *filename, const char *tmplt, int argc, const char **argv
return(-1);
}
-#ifdef HAVE_POSIX_FADVISExxx
-
- /* with update we have write ops, so they will probably not be done by now, this means
- the buffers will not get freed. But calling this for the whole file - header
- will let the data off the hook as soon as it is written when if it is from a previous
- update cycle. Calling fdsync to force things is much too hard here. */
-
- if (0 != posix_fadvise(fileno(rrd_file), rra_begin, 0, POSIX_FADV_DONTNEED)) {
- rrd_set_error("setting POSIX_FADV_DONTNEED on '%s': %s",filename, rrd_strerror(errno));
- fclose(rrd_file);
- return(-1);
- }
-#endif
-
/* OK now close the files and free the memory */
if(fclose(rrd_file) != 0){
rrd_set_error("closing rrd");
@@ -1450,14 +1441,6 @@ _rrd_update(const char *filename, const char *tmplt, int argc, const char **argv
rra_start += rrd.rra_def[i].row_cnt
*rrd.stat_head->ds_cnt*sizeof(rrd_value_t);
}
-#ifdef HAVE_POSIX_FADVISExxx
- /* same procedure as above ... */
- if (0 != posix_fadvise(fileno(rrd_file), rra_begin, 0, POSIX_FADV_DONTNEED)) {
- rrd_set_error("setting POSIX_FADV_DONTNEED on '%s': %s",filename, rrd_strerror(errno));
- fclose(rrd_file);
- return(-1);
- }
-#endif
fclose(rrd_file);
}
rrd_free(&rrd);