X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;ds=sidebyside;f=program%2Fsrc%2Frrd_open.c;h=0de9b395baefc9fe83b2dda77ea50c6e916298b0;hb=4ccc433f236e347e6d9997181effc3cc9d32ff62;hp=117c79cd3e11b9508ad385173f5e1d2871aeb23f;hpb=18d19f96c74adfb1704345053a14cbe5af88313e;p=rrdtool-all.git diff --git a/program/src/rrd_open.c b/program/src/rrd_open.c index 117c79cd..0de9b395 100644 --- a/program/src/rrd_open.c +++ b/program/src/rrd_open.c @@ -222,12 +222,20 @@ rrd_file_t *rrd_open( rrd_file->file_len = statb.st_size; } else { rrd_file->file_len = newfile_size; +#ifdef HAVE_POSIX_FALLOCATE + if (posix_fallocate(rrd_simple_file->fd, 0, newfile_size) == -1) { + rrd_set_error("posix_fallocate '%s': %s", file_name, + rrd_strerror(errno)); + goto out_close; + } +#else lseek(rrd_simple_file->fd, newfile_size - 1, SEEK_SET); if ( write(rrd_simple_file->fd, "\0", 1) == -1){ /* poke */ rrd_set_error("write '%s': %s", file_name, rrd_strerror(errno)); goto out_close; } lseek(rrd_simple_file->fd, 0, SEEK_SET); +#endif } #ifdef HAVE_POSIX_FADVISE /* In general we need no read-ahead when dealing with rrd_files. @@ -248,6 +256,7 @@ rrd_file_t *rrd_open( */ #ifdef HAVE_MMAP +#ifndef HAVE_POSIX_FALLOCATE /* force allocating the file on the underlaying filesystem to prevent any * future bus error when the filesystem is full and attempting to write * trough the file mapping. Filling the file using memset on the file @@ -279,6 +288,7 @@ rrd_file_t *rrd_open( lseek(rrd_simple_file->fd, 0, SEEK_SET); } +#endif data = mmap(0, rrd_file->file_len, rrd_simple_file->mm_prot, rrd_simple_file->mm_flags,