projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'master' of ssh://brick.kernel.dk/data/git/fio
[fio.git]
/
engines
/
mmap.c
diff --git
a/engines/mmap.c
b/engines/mmap.c
index 95ad1d842250049162564a078864070cc28c8f2e..dffad90bbff8b2d357f9690b16c391cce1989da2 100644
(file)
--- a/
engines/mmap.c
+++ b/
engines/mmap.c
@@
-9,7
+9,6
@@
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
-#include <assert.h>
#include <sys/mman.h>
#include "../fio.h"
#include <sys/mman.h>
#include "../fio.h"
@@
-19,6
+18,8
@@
static int fio_mmapio_queue(struct thread_data *td, struct io_u *io_u)
struct fio_file *f = io_u->file;
unsigned long long real_off = io_u->offset - f->file_offset;
struct fio_file *f = io_u->file;
unsigned long long real_off = io_u->offset - f->file_offset;
+ fio_ro_check(td, io_u);
+
if (io_u->ddir == DDIR_READ)
memcpy(io_u->xfer_buf, f->mmap + real_off, io_u->xfer_buflen);
else if (io_u->ddir == DDIR_WRITE)
if (io_u->ddir == DDIR_READ)
memcpy(io_u->xfer_buf, f->mmap + real_off, io_u->xfer_buflen);
else if (io_u->ddir == DDIR_WRITE)
@@
-60,6
+61,12
@@
static int fio_mmapio_open(struct thread_data *td, struct fio_file *f)
if (ret)
return ret;
if (ret)
return ret;
+ /*
+ * for size checkup, don't mmap anything.
+ */
+ if (!f->io_size)
+ return 0;
+
if (td_rw(td))
flags = PROT_READ | PROT_WRITE;
else if (td_write(td)) {
if (td_rw(td))
flags = PROT_READ | PROT_WRITE;
else if (td_write(td)) {
@@
-99,14
+106,23
@@
err:
return 1;
}
return 1;
}
-static
void
fio_mmapio_close(struct thread_data fio_unused *td,
-
struct fio_file *f)
+static
int
fio_mmapio_close(struct thread_data fio_unused *td,
+ struct fio_file *f)
{
{
+ int ret = 0, ret2;
+
if (f->mmap) {
if (f->mmap) {
- munmap(f->mmap, f->io_size);
+ if (munmap(f->mmap, f->io_size) < 0)
+ ret = errno;
+
f->mmap = NULL;
}
f->mmap = NULL;
}
- generic_close_file(td, f);
+
+ ret2 = generic_close_file(td, f);
+ if (!ret && ret2)
+ ret = ret2;
+
+ return ret;
}
static struct ioengine_ops ioengine = {
}
static struct ioengine_ops ioengine = {
@@
-115,6
+131,7
@@
static struct ioengine_ops ioengine = {
.queue = fio_mmapio_queue,
.open_file = fio_mmapio_open,
.close_file = fio_mmapio_close,
.queue = fio_mmapio_queue,
.open_file = fio_mmapio_open,
.close_file = fio_mmapio_close,
+ .get_file_size = generic_get_file_size,
.flags = FIO_SYNCIO | FIO_NOEXTEND,
};
.flags = FIO_SYNCIO | FIO_NOEXTEND,
};