If ret==to_submit then io_uring_enter did go to waiting path and we should not repeat it. And that was the intention of a post syscall data->submit check, but reshuffling spoiled it. Signed-off-by: Pavel Begunkov <asml.silence@xxxxxxxxx> --- src/queue.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/queue.c b/src/queue.c index 8c394dd..c2facfd 100644 --- a/src/queue.c +++ b/src/queue.c @@ -124,7 +124,7 @@ static int _io_uring_get_cqe(struct io_uring *ring, struct io_uring_cqe **cqe_pt } data->submit -= ret; - if (ret == (int)data->submit) { + if (!data->submit) { /* * When SETUP_IOPOLL is set, __sys_io_uring enter() * must be called to reap new completions but the call -- 2.24.0