Recent changes (master)
The following changes since commit 2b9415ddc260726c3ea9ae3436826f9181811143:
engines/io_uring: ensure sqe stores are ordered SQ ring tail update (2019-01-15 22:06:05 -0700)
are available in the Git repository at:
git://git.kernel.dk/fio.git master
for you to fetch changes up to 2d644205f56953192d27ccbf193c899ae559fcb7:
engines/io_uring: cleanup setrlimit() (2019-01-16 09:07:13 -0700)
----------------------------------------------------------------
Jens Axboe (2):
io_uring: sync with upstream API
engines/io_uring: cleanup setrlimit()
engines/io_uring.c | 24 +++++++++--------------- os/linux/io_uring.h | 21 +-------------------- t/io_uring.c | 16 ++++------------ 3 files changed, 14 insertions(+), 47 deletions(-)
---
Diff of recent changes:
engines/io_uring.c +9 -15
@@ -154,7 +154,7 @@ static int fio_ioring_prep(struct thread_data *td, struct io_u *io_u) sqe->opcode =IORING_OP_READ_FIXED ; else sqe->opcode = IORING_OP_WRITE_FIXED; - sqe->addr = io_u->xfer_buf; + sqe->addr = (unsigned long ) io_u->xfer_buf; sqe->len = io_u->xfer_buflen; sqe->buf_index = io_u->index; }else {
@@ -162,7 +162,7 @@ static int fio_ioring_prep(struct thread_data *td, struct io_u *io_u) sqe->opcode =IORING_OP_READV ; else sqe->opcode = IORING_OP_WRITEV; - sqe->addr = &ld->iovecs[io_u->index]; + sqe->addr = (unsigned long ) &ld->iovecs[io_u->index]; sqe->len =1 ; } sqe->off = io_u->offset;
@@ -462,15 +462,6 @@ static int fio_ioring_queue_init(struct thread_data *td) } } -if (o->fixedbufs) { -struct rlimit rlim = { - .rlim_cur =RLIM_INFINITY , - .rlim_max =RLIM_INFINITY , - }; - -setrlimit (RLIMIT_MEMLOCK , &rlim); - } - ret =syscall (__NR_sys_io_uring_setup, depth, &p);if (ret <0 )return ret;
@@ -478,13 +469,16 @@ static int fio_ioring_queue_init(struct thread_data *td) ld->ring_fd = ret;if (o->fixedbufs) { -struct io_uring_register_buffers reg = { - .iovecs = ld->iovecs, - .nr_iovecs = depth +struct rlimit rlim = { + .rlim_cur =RLIM_INFINITY , + .rlim_max =RLIM_INFINITY , }; +if (setrlimit (RLIMIT_MEMLOCK , &rlim) <0 ) +return -1 ; + ret =syscall (__NR_sys_io_uring_register, ld->ring_fd, -IORING_REGISTER_BUFFERS , ®); +IORING_REGISTER_BUFFERS , ld->iovecs, depth);if (ret <0 )return ret; }
os/linux/io_uring.h +1 -20
@@ -20,10 +20,7 @@ struct io_uring_sqe {__u16 ioprio;/* ioprio for the request */ __s32 fd;/* file descriptor to do IO on */ __u64 off;/* offset into file */ -union { -void *addr;/* buffer or iovecs */ -__u64 __pad; - }; +__u64 addr;/* pointer to buffer or iovecs */ __u32 len;/* buffer size or number of iovecs */ union {__kernel_rwf_t rw_flags;
@@ -136,20 +133,4 @@ struct io_uring_params {#define IORING_REGISTER_FILES 2#define IORING_UNREGISTER_FILES 3 -struct io_uring_register_buffers { -union { -struct iovec *iovecs; -__u64 pad; - }; -__u32 nr_iovecs; -}; - -struct io_uring_register_files { -union { -__s32 *fds; -__u64 pad; - }; -__u32 nr_fds; -}; -#endif
t/io_uring.c +4 -12
@@ -96,21 +96,15 @@ static int do_nop = 0; /* no-op SQ ring commands */static int io_uring_register_buffers (struct submitter *s) { -struct io_uring_register_buffers reg = { - .iovecs = s->iovecs, - .nr_iovecs =DEPTH - }; -if (do_nop)return 0 ;return syscall (__NR_sys_io_uring_register, s->ring_fd, -IORING_REGISTER_BUFFERS , ®); +IORING_REGISTER_BUFFERS , s->iovecs,DEPTH ); }static int io_uring_register_files (struct submitter *s) { -struct io_uring_register_files reg;int i;if (do_nop)
@@ -121,11 +115,9 @@ static int io_uring_register_files(struct submitter *s) s->fds[i] = s->files[i].real_fd; s->files[i].fixed_fd = i; } - reg.fds = s->fds; - reg.nr_fds = s->nr_files;return syscall (__NR_sys_io_uring_register, s->ring_fd, -IORING_REGISTER_FILES , ®); +IORING_REGISTER_FILES , s->fds, s->nr_files); }static int io_uring_setup (unsigned entries,struct io_uring_params *p)
@@ -187,12 +179,12 @@ static void init_io(struct submitter *s, unsigned index) }if (fixedbufs) { sqe->opcode =IORING_OP_READ_FIXED ; - sqe->addr = s->iovecs[index].iov_base; + sqe->addr = (unsigned long ) s->iovecs[index].iov_base; sqe->len =BS ; sqe->buf_index = index; }else { sqe->opcode =IORING_OP_READV ; - sqe->addr = &s->iovecs[index]; + sqe->addr = (unsigned long ) &s->iovecs[index]; sqe->len =1 ; sqe->buf_index =0 ; }