X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=engines%2Ffio-engine-mmap.c;h=20dcfd2264cb3afc981e371c9c89aa2c28c1a447;hp=c85f6617309da24d4fca7bcc79dc3c443708f69c;hb=5f350952eff89948bfbf1eb6ac4d3d08a9109581;hpb=87dc1ab1b4df7b977f60e3d43533a896e2ee665b diff --git a/engines/fio-engine-mmap.c b/engines/fio-engine-mmap.c index c85f6617..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; @@ -50,13 +51,15 @@ static int fio_mmapio_queue(struct thread_data *td, struct io_u *io_u) memcpy(io_u->buf, f->mmap + real_off, io_u->buflen); 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) - return msync(f->mmap, f->file_size, MS_SYNC); + 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) @@ -86,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, @@ -96,3 +99,13 @@ struct ioengine_ops ioengine = { .cleanup = fio_mmapio_cleanup, .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); +}