diff --git a/src/rrd_open.c b/src/rrd_open.c
index 117c79cd3e11b9508ad385173f5e1d2871aeb23f..46a5fcf412b6b0a2beb41990e49ac97c528d500b 100644 (file)
--- a/src/rrd_open.c
+++ b/src/rrd_open.c
rrd_file->file_len = statb.st_size;
} else {
rrd_file->file_len = newfile_size;
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);
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_POSIX_FADVISE
/* In general we need no read-ahead when dealing with rrd_files.
*/
#ifdef HAVE_MMAP
*/
#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
/* 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);
}
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,
data = mmap(0, rrd_file->file_len,
rrd_simple_file->mm_prot, rrd_simple_file->mm_flags,
goto out_close;
}
rrd_simple_file->file_start = data;
goto out_close;
}
rrd_simple_file->file_start = data;
- if (rdwr & RRD_CREAT) {
- goto out_done;
- }
#endif
if (rdwr & RRD_CREAT)
goto out_done;
#endif
if (rdwr & RRD_CREAT)
goto out_done;
int whence)
{
off_t ret = 0;
int whence)
{
off_t ret = 0;
+#ifndef HAVE_MMAP
rrd_simple_file_t *rrd_simple_file;
rrd_simple_file = (rrd_simple_file_t *)rrd_file->pvt;
rrd_simple_file_t *rrd_simple_file;
rrd_simple_file = (rrd_simple_file_t *)rrd_file->pvt;
-
+#endif
+
#ifdef HAVE_MMAP
if (whence == SEEK_SET)
rrd_file->pos = off;
#ifdef HAVE_MMAP
if (whence == SEEK_SET)
rrd_file->pos = off;