Introduce enum fio_q_status
[fio.git] / engines / glusterfs_async.c
index 95ca84ef2def417aefb31ce70ce39d44503271af..9e1c4bf038f3b3ce2fbe27f3ddb19cffbd6f3dd2 100644 (file)
@@ -13,7 +13,7 @@ struct fio_gf_iou {
 
 static struct io_u *fio_gf_event(struct thread_data *td, int event)
 {
-       struct gf_data *gf_data = td->io_ops->data;
+       struct gf_data *gf_data = td->io_ops_data;
 
        dprint(FD_IO, "%s\n", __FUNCTION__);
        return gf_data->aio_events[event];
@@ -22,7 +22,7 @@ static struct io_u *fio_gf_event(struct thread_data *td, int event)
 static int fio_gf_getevents(struct thread_data *td, unsigned int min,
                            unsigned int max, const struct timespec *t)
 {
-       struct gf_data *g = td->io_ops->data;
+       struct gf_data *g = td->io_ops_data;
        unsigned int events = 0;
        struct io_u *io_u;
        int i;
@@ -70,20 +70,17 @@ static void fio_gf_io_u_free(struct thread_data *td, struct io_u *io_u)
 
 static int fio_gf_io_u_init(struct thread_data *td, struct io_u *io_u)
 {
+    struct fio_gf_iou *io;
        dprint(FD_FILE, "%s\n", __FUNCTION__);
-
-       if (!io_u->engine_data) {
-               struct fio_gf_iou *io;
-
-               io = malloc(sizeof(struct fio_gf_iou));
-               if (!io) {
-                       td_verror(td, errno, "malloc");
-                       return 1;
-               }
-               io->io_complete = 0;
-               io->io_u = io_u;
-               io_u->engine_data = io;
-       }
+    
+    io = malloc(sizeof(struct fio_gf_iou));
+    if (!io) {
+        td_verror(td, errno, "malloc");
+        return 1;
+    }
+    io->io_complete = 0;
+    io->io_u = io_u;
+    io_u->engine_data = io;
        return 0;
 }
 
@@ -92,14 +89,14 @@ static void gf_async_cb(glfs_fd_t * fd, ssize_t ret, void *data)
        struct io_u *io_u = data;
        struct fio_gf_iou *iou = io_u->engine_data;
 
-       dprint(FD_IO, "%s ret %lu\n", __FUNCTION__, ret);
+       dprint(FD_IO, "%s ret %zd\n", __FUNCTION__, ret);
        iou->io_complete = 1;
 }
 
-static int fio_gf_async_queue(struct thread_data fio_unused * td,
-                             struct io_u *io_u)
+static enum fio_q_status fio_gf_async_queue(struct thread_data fio_unused * td,
+                                           struct io_u *io_u)
 {
-       struct gf_data *g = td->io_ops->data;
+       struct gf_data *g = td->io_ops_data;
        int r;
 
        dprint(FD_IO, "%s op %s\n", __FUNCTION__, io_ddir_name(io_u->ddir));
@@ -117,10 +114,12 @@ static int fio_gf_async_queue(struct thread_data fio_unused * td,
                r = glfs_discard_async(g->fd, io_u->offset, io_u->xfer_buflen,
                                       gf_async_cb, io_u);
 #endif
+       else if (io_u->ddir == DDIR_DATASYNC)
+               r = glfs_fdatasync_async(g->fd, gf_async_cb, io_u);
        else if (io_u->ddir == DDIR_SYNC)
                r = glfs_fsync_async(g->fd, gf_async_cb, io_u);
        else
-               r = -EINVAL;
+               r = EINVAL;
 
        if (r) {
                log_err("glfs queue failed.\n");
@@ -135,7 +134,7 @@ failed:
        return FIO_Q_COMPLETED;
 }
 
-int fio_gf_async_setup(struct thread_data *td)
+static int fio_gf_async_setup(struct thread_data *td)
 {
        struct gf_data *g;
        int r;
@@ -148,7 +147,7 @@ int fio_gf_async_setup(struct thread_data *td)
                return r;
 
        td->o.use_thread = 1;
-       g = td->io_ops->data;
+       g = td->io_ops_data;
        g->aio_events = calloc(td->o.iodepth, sizeof(struct io_u *));
        if (!g->aio_events) {
                r = -ENOMEM;