X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=engines%2Ffio-engine-mmap.c;h=483a704eb19bfa45c37c4b6a772032a03481f95f;hp=abb42bf1c588c47b8d62c1bef55df664a23105d7;hb=cb781c758e5df7ff4c6f655c1e4f9df3043a4be9;hpb=2866c82d598e30604d8a92723c664ee6ced90fb0 diff --git a/engines/fio-engine-mmap.c b/engines/fio-engine-mmap.c index abb42bf1..483a704e 100644 --- a/engines/fio-engine-mmap.c +++ b/engines/fio-engine-mmap.c @@ -42,21 +42,26 @@ static struct io_u *fio_mmapio_event(struct thread_data *td, int event) static int fio_mmapio_queue(struct thread_data *td, struct io_u *io_u) { - unsigned long long real_off = io_u->offset - td->file_offset; + struct fio_file *f = io_u->file; + unsigned long long real_off = io_u->offset - f->file_offset; struct mmapio_data *sd = td->io_ops->data; if (io_u->ddir == DDIR_READ) - memcpy(io_u->buf, td->mmap + real_off, io_u->buflen); - else - memcpy(td->mmap + real_off, io_u->buf, io_u->buflen); + 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) { + 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 (msync(td->mmap + real_off, io_u->buflen, MS_SYNC) < 0) + 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(td->mmap + real_off, io_u->buflen, MADV_DONTNEED) < 0) + if (madvise(f->mmap + real_off, io_u->buflen, MADV_DONTNEED) < 0) io_u->error = errno; } @@ -66,11 +71,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) -{ - return msync(td->mmap, td->file_size, MS_SYNC); -} - static void fio_mmapio_cleanup(struct thread_data *td) { if (td->io_ops->data) { @@ -96,6 +96,5 @@ struct ioengine_ops ioengine = { .getevents = fio_mmapio_getevents, .event = fio_mmapio_event, .cleanup = fio_mmapio_cleanup, - .sync = fio_mmapio_sync, - .flags = FIO_SYNCIO, + .flags = FIO_SYNCIO | FIO_MMAPIO, };