aioring: hide it if archs don't define syscalls
[fio.git] / engines / libaio.c
index 9c8a61b7a121e411bf0e6bcc585491fc49789a39..0333509400ca7460781b975443cd1524cb339017 100644 (file)
@@ -8,6 +8,8 @@
 #include <unistd.h>
 #include <errno.h>
 #include <libaio.h>
+#include <sys/time.h>
+#include <sys/resource.h>
 
 #include "../fio.h"
 #include "../lib/pow2.h"
@@ -130,15 +132,21 @@ static int fio_libaio_prep(struct thread_data fio_unused *td, struct io_u *io_u)
                        iocb->aio_fildes = f->fd;
                        iocb->aio_lio_opcode = IO_CMD_PREAD;
                        iocb->u.c.offset = io_u->offset;
-               } else
+               } else {
                        io_prep_pread(iocb, f->fd, io_u->xfer_buf, io_u->xfer_buflen, io_u->offset);
+                       if (o->hipri)
+                               iocb->u.c.flags |= IOCB_FLAG_HIPRI;
+               }
        } else if (io_u->ddir == DDIR_WRITE) {
                if (o->fixedbufs) {
                        iocb->aio_fildes = f->fd;
                        iocb->aio_lio_opcode = IO_CMD_PWRITE;
                        iocb->u.c.offset = io_u->offset;
-               } else
+               } else {
                        io_prep_pwrite(iocb, f->fd, io_u->xfer_buf, io_u->xfer_buflen, io_u->offset);
+                       if (o->hipri)
+                               iocb->u.c.flags |= IOCB_FLAG_HIPRI;
+               }
        } else if (ddir_sync(io_u->ddir))
                io_prep_fsync(iocb, f->fd);
 
@@ -444,11 +452,18 @@ static int fio_libaio_queue_init(struct libaio_data *ld, unsigned int depth,
                flags |= IOCTX_FLAG_IOPOLL;
        if (useriocb)
                flags |= IOCTX_FLAG_USERIOCB;
-       if (fixedbufs)
+       if (fixedbufs) {
+               struct rlimit rlim = {
+                       .rlim_cur = RLIM_INFINITY,
+                       .rlim_max = RLIM_INFINITY,
+               };
+
+               setrlimit(RLIMIT_MEMLOCK, &rlim);
                flags |= IOCTX_FLAG_FIXEDBUFS;
+       }
 
        ret = syscall(__NR_sys_io_setup2, depth, flags, ld->user_iocbs,
-                       &ld->aio_ctx);
+                       NULL, NULL, &ld->aio_ctx);
        if (!ret)
                return 0;
        /* fall through to old syscall */