io_uring: don't wait when under-submitting
PATCH v5 1/1 io_uring: don't wait when under-submitting
In reply to a message not in the archiveThere is no reliable way to submit and wait in a single syscall, as io_submit_sqes() may under-consume sqes (in case of an early error). Then it will wait for not-yet-submitted requests, deadlocking the user in most cases.
Don't wait/poll if can't submit all sqes
Signed-off-by Pavel Begunkov <[email protected]>
---
v5: as the v1, but doesn't return -EAGAIN
fs/io_uring.c | 4 ++++ 1 file changed, 4 insertions(+)
fs/io_uring.c +4 -0
@@ -5133,6 +5133,9 @@ SYSCALL_DEFINE6(io_uring_enter, unsigned int, fd, u32, to_submit, submitted =io_submit_sqes (ctx, to_submit, f.file, fd, &cur_mm, false);mutex_unlock (&ctx->uring_lock); + +if (submitted != to_submit) + goto out; }if (flags &IORING_ENTER_GETEVENTS ) {unsigned nr_events =0 ;
@@ -5146,6 +5149,7 @@ SYSCALL_DEFINE6(io_uring_enter, unsigned int, fd, u32, to_submit, } } +out:percpu_ref_put (&ctx->refs); out_fput:fdput (f);
Signature · 1 line
2.24.0
Jens Axboe
maintainerQuoted 6 lines · Pavel Begunkov
There is no reliable way to submit and wait in a single syscall, as
io_submit_sqes()may under-consume sqes (in case of an early error). Then it will wait for not-yet-submitted requests, deadlocking the user in most cases.Don't wait/poll if can't submit all sqes
This looks great, thanks, applied.
Signature · 1 line
Jens Axboe