From: Jens Axboe Date: Tue, 24 Oct 2006 12:46:13 +0000 (+0200) Subject: [PATCH] mmap io engine had broken sync X-Git-Tag: fio-1.8~47 X-Git-Url: https://git.kernel.dk/?p=fio.git;a=commitdiff_plain;h=b907a5b5c708b2620685a866b3b0bcd0d2657e54;hp=87dc1ab1b4df7b977f60e3d43533a896e2ee665b;ds=sidebyside [PATCH] mmap io engine had broken sync It returned from ->queue() too quickly, it still needs to set the last event handler. Signed-off-by: Jens Axboe --- diff --git a/engines/fio-engine-mmap.c b/engines/fio-engine-mmap.c index c85f6617..483a704e 100644 --- a/engines/fio-engine-mmap.c +++ b/engines/fio-engine-mmap.c @@ -50,13 +50,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)