--- x/io_uring/io_uring.c +++ y/io_uring/io_uring.c @@ -2535,10 +2535,10 @@ static int io_cqring_wait(struct io_ring prepare_to_wait_exclusive(&ctx->cq_wait, &iowq.wq, TASK_INTERRUPTIBLE); ret = io_cqring_wait_schedule(ctx, &iowq, timeout); + finish_wait(&ctx->cq_wait, &iowq.wq); cond_resched(); } while (ret > 0); - finish_wait(&ctx->cq_wait, &iowq.wq); restore_saved_sigmask_unless(ret == -EINTR); return READ_ONCE(rings->cq.head) == READ_ONCE(rings->cq.tail) ? ret : 0;