#include <sys/mman.h>
#include "../fio.h"
+#include "../verify.h"
/*
- * Limits us to 2GB of mapped files in total
+ * Limits us to 1GB of mapped files in total
*/
-#define MMAP_TOTAL_SZ (2 * 1024 * 1024 * 1024UL)
+#define MMAP_TOTAL_SZ (1 * 1024 * 1024 * 1024UL)
static unsigned long mmap_map_size;
static unsigned long mmap_map_mask;
goto err;
}
- if (file_invalidate_cache(td, f))
- goto err;
-
if (!td_random(td)) {
if (madvise(f->mmap_ptr, length, MADV_SEQUENTIAL) < 0) {
td_verror(td, errno, "madvise");
if (f->mmap_sz > f->io_size)
f->mmap_sz = f->io_size;
- f->mmap_off = io_u->offset & ~mmap_map_mask;
- if (io_u->offset + io_u->buflen >= f->mmap_off + f->mmap_sz)
- f->mmap_off -= io_u->buflen;
+ f->mmap_off = io_u->offset;
ret = fio_mmap_file(td, f, f->mmap_sz, f->mmap_off);
done:
memcpy(io_u->xfer_buf, io_u->mmap_data, io_u->xfer_buflen);
else if (io_u->ddir == DDIR_WRITE)
memcpy(io_u->mmap_data, io_u->xfer_buf, io_u->xfer_buflen);
- else if (io_u->ddir == DDIR_SYNC) {
+ else if (ddir_sync(io_u->ddir)) {
if (msync(f->mmap_ptr, f->mmap_sz, MS_SYNC)) {
io_u->error = errno;
td_verror(td, io_u->error, "msync");
/*
* not really direct, but should drop the pages from the cache
*/
- if (td->o.odirect && io_u->ddir != DDIR_SYNC) {
+ if (td->o.odirect && !ddir_sync(io_u->ddir)) {
if (msync(io_u->mmap_data, io_u->xfer_buflen, MS_SYNC) < 0) {
io_u->error = errno;
td_verror(td, io_u->error, "msync");