projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[PATCH] libaio engine: fake work-around for sync issue
[fio.git]
/
engines
/
libaio.c
diff --git
a/engines/libaio.c
b/engines/libaio.c
index c95600548c645449a07946b7cabb8c7b6de5162b..acc125f48e46df799c7d7fdcf0c42daea9694145 100644
(file)
--- a/
engines/libaio.c
+++ b/
engines/libaio.c
@@
-18,6
+18,7
@@
struct libaio_data {
io_context_t aio_ctx;
struct io_event *aio_events;
struct libaio_data {
io_context_t aio_ctx;
struct io_event *aio_events;
+ struct io_u *sync_io_u;
};
static int fio_libaio_prep(struct thread_data fio_unused *td, struct io_u *io_u)
};
static int fio_libaio_prep(struct thread_data fio_unused *td, struct io_u *io_u)
@@
-40,6
+41,13
@@
static struct io_u *fio_libaio_event(struct thread_data *td, int event)
{
struct libaio_data *ld = td->io_ops->data;
{
struct libaio_data *ld = td->io_ops->data;
+ if (ld->sync_io_u) {
+ struct io_u *ret = ld->sync_io_u;
+
+ ld->sync_io_u = NULL;
+ return ret;
+ }
+
return ev_to_iou(ld->aio_events + event);
}
return ev_to_iou(ld->aio_events + event);
}
@@
-49,6
+57,9
@@
static int fio_libaio_getevents(struct thread_data *td, int min, int max,
struct libaio_data *ld = td->io_ops->data;
long r;
struct libaio_data *ld = td->io_ops->data;
long r;
+ if (ld->sync_io_u)
+ return 1;
+
do {
r = io_getevents(ld->aio_ctx, min, max, ld->aio_events, t);
if (r >= min)
do {
r = io_getevents(ld->aio_ctx, min, max, ld->aio_events, t);
if (r >= min)
@@
-91,6
+102,7
@@
static int fio_libaio_queue(struct thread_data *td, struct io_u *io_u)
* requests to flush first.
*/
ret = fsync(io_u->file->fd);
* requests to flush first.
*/
ret = fsync(io_u->file->fd);
+ ld->sync_io_u = io_u;
break;
} else
break;
break;
} else
break;