projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
t/io_uring: verbose error for -95/-EOPNOTSUPP failure
[fio.git]
/
t
/
io_uring.c
diff --git
a/t/io_uring.c
b/t/io_uring.c
index 78b92685316cb7bc751cd3b49295be388f8a5807..7c75c887eb4f511616dfdba9fa48068e23832dd7 100644
(file)
--- a/
t/io_uring.c
+++ b/
t/io_uring.c
@@
-24,8
+24,6
@@
#include "../lib/types.h"
#include "../os/linux/io_uring.h"
#include "../lib/types.h"
#include "../os/linux/io_uring.h"
-#define barrier() __asm__ __volatile__("": : :"memory")
-
#define min(a, b) ((a < b) ? (a) : (b))
struct io_sq_ring {
#define min(a, b) ((a < b) ? (a) : (b))
struct io_sq_ring {
@@
-98,21
+96,15
@@
static int do_nop = 0; /* no-op SQ ring commands */
static int io_uring_register_buffers(struct submitter *s)
{
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,
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)
{
}
static int io_uring_register_files(struct submitter *s)
{
- struct io_uring_register_files reg;
int i;
if (do_nop)
int i;
if (do_nop)
@@
-123,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;
}
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,
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)
}
static int io_uring_setup(unsigned entries, struct io_uring_params *p)
@@
-139,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,
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)
}
static int gettid(void)
@@
-189,12
+179,12
@@
static void init_io(struct submitter *s, unsigned index)
}
if (fixedbufs) {
sqe->opcode = IORING_OP_READ_FIXED;
}
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->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;
}
sqe->len = 1;
sqe->buf_index = 0;
}
@@
-211,7
+201,7
@@
static int prep_more_ios(struct submitter *s, int max_ios)
next_tail = tail = *ring->tail;
do {
next_tail++;
next_tail = tail = *ring->tail;
do {
next_tail++;
- barrier();
+
read_
barrier();
if (next_tail == *ring->head)
break;
if (next_tail == *ring->head)
break;
@@
-224,9
+214,9
@@
static int prep_more_ios(struct submitter *s, int max_ios)
if (*ring->tail != tail) {
/* order tail store with writes to sqes above */
if (*ring->tail != tail) {
/* order tail store with writes to sqes above */
- barrier();
+
write_
barrier();
*ring->tail = tail;
*ring->tail = tail;
- barrier();
+
write_
barrier();
}
return prepped;
}
}
return prepped;
}
@@
-263,7
+253,7
@@
static int reap_events(struct submitter *s)
do {
struct file *f;
do {
struct file *f;
- barrier();
+
read_
barrier();
if (head == *ring->tail)
break;
cqe = &ring->cqes[head & cq_ring_mask];
if (head == *ring->tail)
break;
cqe = &ring->cqes[head & cq_ring_mask];
@@
-272,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);
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;
}
}
return -1;
}
}
@@
-285,7
+277,7
@@
static int reap_events(struct submitter *s)
s->inflight -= reaped;
*ring->head = head;
s->inflight -= reaped;
*ring->head = head;
- barrier();
+
write_
barrier();
return reaped;
}
return reaped;
}
@@
-325,6
+317,8
@@
submit:
if (to_wait)
flags = IORING_ENTER_GETEVENTS;
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++;
}
ret = io_uring_enter(s, to_submit, to_wait, flags);
s->calls++;
}
@@
-338,9
+332,10
@@
submit:
do {
int r;
r = reap_events(s);
do {
int r;
r = reap_events(s);
- if (r == -1)
+ if (r == -1) {
+ s->finish = 1;
break;
break;
- else if (r > 0)
+
}
else if (r > 0)
this_reap += r;
} while (sq_thread_poll && this_reap < to_wait);
s->reaps += this_reap;
this_reap += r;
} while (sq_thread_poll && this_reap < to_wait);
s->reaps += this_reap;
@@
-406,7
+401,7
@@
static int setup_ring(struct submitter *s)
memset(&p, 0, sizeof(p));
memset(&p, 0, sizeof(p));
- if (polled)
+ if (polled
&& !do_nop
)
p.flags |= IORING_SETUP_IOPOLL;
if (sq_thread_poll) {
p.flags |= IORING_SETUP_SQPOLL;
p.flags |= IORING_SETUP_IOPOLL;
if (sq_thread_poll) {
p.flags |= IORING_SETUP_SQPOLL;
@@
-475,6
+470,7
@@
static void file_depths(char *buf)
char *p;
int i;
char *p;
int i;
+ buf[0] = '\0';
p = buf;
for (i = 0; i < s->nr_files; i++) {
struct file *f = &s->files[i];
p = buf;
for (i = 0; i < s->nr_files; i++) {
struct file *f = &s->files[i];