X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Frrd_update.c;h=ed79a6a15b1856b2a153468a8c4b0036ff40a9c0;hb=5fc7ff89bdbced9c593c566fea9840a269935dcd;hp=dc1a492bfdfeeba8139f8497f48c5454718b54c2;hpb=f3df7df77761c610c9ba328fac01619f4e7b563f;p=rrdtool.git diff --git a/src/rrd_update.c b/src/rrd_update.c index dc1a492..ed79a6a 100644 --- a/src/rrd_update.c +++ b/src/rrd_update.c @@ -10,7 +10,7 @@ #include #include #ifdef HAVE_MMAP - #include +# include #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_irra_cnt; rra_start += rrd.rra_def[i].row_cnt * rrd.stat_head -> ds_cnt * sizeof(rrd_value_t), i++) { - /* is there anything to write for this RRA? If not, continue. */ + /* is th5Aere anything to write for this RRA? If not, continue. */ if (rra_step_cnt[i] == 0) continue; /* write the first row */ @@ -1398,16 +1403,17 @@ _rrd_update(const char *filename, const char *tmplt, int argc, const char **argv fclose(rrd_file); return(-1); } -#ifdef POSIX_FADVISE + +#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(in_file), rra_begin, 0, POSIX_FADV_DONTNEED)) { - rrd_set_error("setting POSIX_FADV_DONTNEED on '%s': %s",file_name, rrd_strerror(errno)); - fclose(in_file); + 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 @@ -1449,11 +1455,11 @@ _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 POSIX_FADVISE +#ifdef HAVE_POSIX_FADVISExxx /* same procedure as above ... */ - if (0 != posix_fadvise(fileno(in_file), rrd_head_size, 0, POSIX_FADV_DONTNEED)) { - rrd_set_error("setting POSIX_FADV_DONTNEED on '%s': %s",file_name, rrd_strerror(errno)); - fclose(in_file); + 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