X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=engines%2Ffio-engine-mmap.c;h=20dcfd2264cb3afc981e371c9c89aa2c28c1a447;hp=0c79752ff17c3c61c33b2fc01a715b471f531566;hb=5f350952eff89948bfbf1eb6ac4d3d08a9109581;hpb=d9257beae0247e694c0d7c286a4088a2ebc53ccf diff --git a/engines/fio-engine-mmap.c b/engines/fio-engine-mmap.c index 0c79752f..20dcfd22 100644 --- a/engines/fio-engine-mmap.c +++ b/engines/fio-engine-mmap.c @@ -8,8 +8,9 @@ #include #include #include -#include "fio.h" -#include "os.h" + +#include "../fio.h" +#include "../os.h" struct mmapio_data { struct io_u *last_io_u; @@ -48,13 +49,17 @@ static int fio_mmapio_queue(struct thread_data *td, struct io_u *io_u) if (io_u->ddir == DDIR_READ) memcpy(io_u->buf, f->mmap + real_off, io_u->buflen); - else + else if (io_u->ddir == DDIR_WRITE) memcpy(f->mmap + real_off, io_u->buf, io_u->buflen); + else if (io_u->ddir == DDIR_SYNC) { + if (msync(f->mmap, f->file_size, MS_SYNC)) + io_u->error = errno; + } /* * not really direct, but should drop the pages from the cache */ - if (td->odirect) { + if (td->odirect && io_u->ddir != DDIR_SYNC) { if (msync(f->mmap + real_off, io_u->buflen, MS_SYNC) < 0) io_u->error = errno; if (madvise(f->mmap + real_off, io_u->buflen, MADV_DONTNEED) < 0) @@ -67,11 +72,6 @@ static int fio_mmapio_queue(struct thread_data *td, struct io_u *io_u) return io_u->error; } -static int fio_mmapio_sync(struct thread_data *td, struct fio_file *f) -{ - return msync(f->mmap, f->file_size, MS_SYNC); -} - static void fio_mmapio_cleanup(struct thread_data *td) { if (td->io_ops->data) { @@ -89,7 +89,7 @@ static int fio_mmapio_init(struct thread_data *td) return 0; } -struct ioengine_ops ioengine = { +static struct ioengine_ops ioengine = { .name = "mmap", .version = FIO_IOOPS_VERSION, .init = fio_mmapio_init, @@ -97,6 +97,15 @@ struct ioengine_ops ioengine = { .getevents = fio_mmapio_getevents, .event = fio_mmapio_event, .cleanup = fio_mmapio_cleanup, - .sync = fio_mmapio_sync, .flags = FIO_SYNCIO | FIO_MMAPIO, }; + +static void fio_init fio_mmapio_register(void) +{ + register_ioengine(&ioengine); +} + +static void fio_exit fio_mmapio_unregister(void) +{ + unregister_ioengine(&ioengine); +}