}
}
- td->io_ops->data = wd;
+ td->io_ops_data = wd;
if (!rc) {
struct thread_ctx *ctx;
rc = 1;
}
- wd = td->io_ops->data;
+ wd = td->io_ops_data;
wd->iothread_running = TRUE;
wd->iocp = hFile;
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");
}
{
struct windowsaio_data *wd;
- wd = td->io_ops->data;
+ wd = td->io_ops_data;
if (wd != NULL) {
wd->iothread_running = FALSE;
free(wd->aio_events);
free(wd);
- td->io_ops->data = NULL;
+ td->io_ops_data = NULL;
}
}
/* 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");
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];
}
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;