summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: f7ea9cd)
raw | patch | inline | side by side (parent: f7ea9cd)
author | oetiker <oetiker@a5681a0c-68f1-0310-ab6d-d61299d08faa> | |
Thu, 2 Feb 2012 15:38:44 +0000 (15:38 +0000) | ||
committer | oetiker <oetiker@a5681a0c-68f1-0310-ab6d-d61299d08faa> | |
Thu, 2 Feb 2012 15:38:44 +0000 (15:38 +0000) |
program/configure.ac | patch | blob | history | |
program/src/rrd_open.c | patch | blob | history |
diff --git a/program/configure.ac b/program/configure.ac
index b686bc0b23eedf307eb1b6f2728fbcbeadff5577..076fcbfb6f44115c44b5c3b8104ad8e9c7406be0 100644 (file)
--- a/program/configure.ac
+++ b/program/configure.ac
#include <fcntl.h>])
AC_CHECK_FUNCS(posix_fadvise)
+dnl can we use posix_fallocate
+AC_CHECK_FUNCS(posix_fallocate)
+
CONFIGURE_PART(Libintl Processing)
AM_GNU_GETTEXT_VERSION(0.17)
diff --git a/program/src/rrd_open.c b/program/src/rrd_open.c
index ff332d0202a118e1769ef378a7e0311524b65c27..9a5385ae9ef979668f92d04959e50e55e4b2dc72 100644 (file)
--- a/program/src/rrd_open.c
+++ b/program/src/rrd_open.c
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.
*/
#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
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,