sg engine: IO should be done sync of O_SYNC and O_DIRECT
[fio.git] / engines / mmap.c
index 05a4d5163ce5dbd45a3ba351419417e642b65be1..6671fc0e66d8e78e9f7c0fbeac8dd98a8b4d0946 100644 (file)
@@ -12,6 +12,7 @@
 #include <sys/mman.h>
 
 #include "../fio.h"
 #include <sys/mman.h>
 
 #include "../fio.h"
+#include "../verify.h"
 
 /*
  * Limits us to 2GB of mapped files in total
 
 /*
  * Limits us to 2GB of mapped files in total
@@ -43,14 +44,9 @@ static int fio_mmap_file(struct thread_data *td, struct fio_file *f,
 
                f->mmap_ptr = NULL;
                td_verror(td, err, "mmap");
 
                f->mmap_ptr = NULL;
                td_verror(td, err, "mmap");
-               if (err == EINVAL && f->io_size > 2*1024*1024*1024UL)
-                       log_err("fio: mmap size likely too large\n");
                goto err;
        }
 
                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 (!td_random(td)) {
                if (madvise(f->mmap_ptr, length, MADV_SEQUENTIAL) < 0) {
                        td_verror(td, errno, "madvise");
@@ -117,7 +113,7 @@ static int fio_mmapio_queue(struct thread_data *td, struct io_u *io_u)
                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);
                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");
                if (msync(f->mmap_ptr, f->mmap_sz, MS_SYNC)) {
                        io_u->error = errno;
                        td_verror(td, io_u->error, "msync");
@@ -127,7 +123,7 @@ static int fio_mmapio_queue(struct thread_data *td, struct io_u *io_u)
        /*
         * not really direct, but should drop the pages from the cache
         */
        /*
         * 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");
                if (msync(io_u->mmap_data, io_u->xfer_buflen, MS_SYNC) < 0) {
                        io_u->error = errno;
                        td_verror(td, io_u->error, "msync");