#include <unistd.h>
#include <errno.h>
#include <libaio.h>
+#include <sys/time.h>
+#include <sys/resource.h>
#include "../fio.h"
#include "../lib/pow2.h"
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);
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 */