t/io_uring: verbose error for -95/-EOPNOTSUPP failure
[fio.git] / t / io_uring.c
index ef5d52d1f930180d083ef7b614e811e17a4dd395..7c75c887eb4f511616dfdba9fa48068e23832dd7 100644 (file)
@@ -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, &reg);
+                       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, &reg);
+                       IORING_REGISTER_FILES, s->fds, s->nr_files);
 }
 
 static int io_uring_setup(unsigned entries, struct io_uring_params *p)
@@ -137,7 +129,7 @@ static int io_uring_enter(struct submitter *s, unsigned int to_submit,
                          unsigned int min_complete, unsigned int flags)
 {
        return syscall(__NR_sys_io_uring_enter, s->ring_fd, to_submit,
-                       min_complete, flags);
+                       min_complete, flags, NULL, 0);
 }
 
 static int gettid(void)
@@ -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;
        }
@@ -270,6 +262,8 @@ static int reap_events(struct submitter *s)
                        f->pending_ios--;
                        if (cqe->res != BS) {
                                printf("io: unexpected ret=%d\n", cqe->res);
+                               if (polled && cqe->res == -EOPNOTSUPP)
+                                       printf("Your filesystem doesn't support poll\n");
                                return -1;
                        }
                }
@@ -323,6 +317,8 @@ submit:
 
                        if (to_wait)
                                flags = IORING_ENTER_GETEVENTS;
+                       if ((*ring->flags & IORING_SQ_NEED_WAKEUP))
+                               flags |= IORING_ENTER_SQ_WAKEUP;
                        ret = io_uring_enter(s, to_submit, to_wait, flags);
                        s->calls++;
                }