Merge branch 'travis_32bit' of https://github.com/sitsofe/fio
[fio.git] / engines / windowsaio.c
index cbbed6a0cf19603022b39ef7179585932d4f0317..c4c5abd45ac4c210c4048f15d8611bec4ab325ac 100644 (file)
@@ -35,17 +35,7 @@ struct thread_ctx {
        struct windowsaio_data *wd;
 };
 
-static BOOL timeout_expired(DWORD start_count, DWORD end_count);
-static int fio_windowsaio_getevents(struct thread_data *td, unsigned int min,
-                               unsigned int max, const struct timespec *t);
-static struct io_u *fio_windowsaio_event(struct thread_data *td, int event);
-static int fio_windowsaio_queue(struct thread_data *td,
-                                 struct io_u *io_u);
-static void fio_windowsaio_cleanup(struct thread_data *td);
 static DWORD WINAPI IoCompletionRoutine(LPVOID lpParameter);
-static int fio_windowsaio_init(struct thread_data *td);
-static int fio_windowsaio_open_file(struct thread_data *td, struct fio_file *f);
-static int fio_windowsaio_close_file(struct thread_data fio_unused *td, struct fio_file *f);
 
 static int fio_windowsaio_init(struct thread_data *td)
 {
@@ -84,7 +74,7 @@ static int fio_windowsaio_init(struct thread_data *td)
                }
        }
 
-       td->io_ops->data = wd;
+       td->io_ops_data = wd;
 
        if (!rc) {
                struct thread_ctx *ctx;
@@ -97,7 +87,7 @@ static int fio_windowsaio_init(struct thread_data *td)
                        rc = 1;
                }
 
-               wd = td->io_ops->data;
+               wd = td->io_ops_data;
                wd->iothread_running = TRUE;
                wd->iocp = hFile;
 
@@ -113,10 +103,15 @@ static int fio_windowsaio_init(struct thread_data *td)
 
                if (!rc)
                {
+                       DWORD threadid;
+
                        ctx->iocp = hFile;
                        ctx->wd = wd;
-                       wd->iothread = CreateThread(NULL, 0, IoCompletionRoutine, ctx, 0, NULL);
-                       if (wd->iothread == NULL)
+                       wd->iothread = CreateThread(NULL, 0, IoCompletionRoutine, ctx, 0, &threadid);
+
+                       if (wd->iothread != NULL)
+                               fio_setaffinity(threadid, td->o.cpumask);
+                       else
                                log_err("windowsaio: failed to create io completion thread\n");
                }
 
@@ -131,7 +126,7 @@ static void fio_windowsaio_cleanup(struct thread_data *td)
 {
        struct windowsaio_data *wd;
 
-       wd = td->io_ops->data;
+       wd = td->io_ops_data;
 
        if (wd != NULL) {
                wd->iothread_running = FALSE;
@@ -143,11 +138,10 @@ static void fio_windowsaio_cleanup(struct thread_data *td)
                free(wd->aio_events);
                free(wd);
 
-               td->io_ops->data = NULL;
+               td->io_ops_data = NULL;
        }
 }
 
-
 static int fio_windowsaio_open_file(struct thread_data *td, struct fio_file *f)
 {
        int rc = 0;
@@ -203,10 +197,10 @@ static int fio_windowsaio_open_file(struct thread_data *td, struct fio_file *f)
 
        /* Only set up the completion port and thread if we're not just
         * querying the device size */
-       if (!rc && td->io_ops->data != NULL) {
+       if (!rc && td->io_ops_data != NULL) {
                struct windowsaio_data *wd;
 
-               wd = td->io_ops->data;
+               wd = td->io_ops_data;
 
                if (CreateIoCompletionPort(f->hFile, wd->iocp, 0, 0) == NULL) {
                        log_err("windowsaio: failed to create io completion port\n");
@@ -251,7 +245,7 @@ static BOOL timeout_expired(DWORD start_count, DWORD end_count)
 
 static struct io_u* fio_windowsaio_event(struct thread_data *td, int event)
 {
-       struct windowsaio_data *wd = td->io_ops->data;
+       struct windowsaio_data *wd = td->io_ops_data;
        return wd->aio_events[event];
 }
 
@@ -259,7 +253,7 @@ static int fio_windowsaio_getevents(struct thread_data *td, unsigned int min,
                                    unsigned int max,
                                    const struct timespec *t)
 {
-       struct windowsaio_data *wd = td->io_ops->data;
+       struct windowsaio_data *wd = td->io_ops_data;
        unsigned int dequeued = 0;
        struct io_u *io_u;
        int i;