Message ID | 20200519133041.112138-1-sgarzare@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | io_uring: retry io_uring_submit() if it fails with errno=EINTR | expand |
On Tue, May 19, 2020 at 03:30:41PM +0200, Stefano Garzarella wrote: > As recently documented [1], io_uring_enter(2) syscall can return an > error (errno=EINTR) if the operation was interrupted by a delivery > of a signal before it could complete. > > This should happen when IORING_ENTER_GETEVENTS flag is used, for > example during io_uring_submit_and_wait() or during io_uring_submit() > when IORING_SETUP_IOPOLL is enabled. > > We shouldn't have this problem for now, but it's better to prevent it. > > [1] https://github.com/axboe/liburing/commit/344355ec6619de8f4e64584c9736530b5346e4f4 > > Signed-off-by: Stefano Garzarella <sgarzare@redhat.com> > --- > block/io_uring.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) Thanks, applied to my block tree: https://github.com/stefanha/qemu/commits/block Stefan
diff --git a/block/io_uring.c b/block/io_uring.c index a3142ca989..9765681f7c 100644 --- a/block/io_uring.c +++ b/block/io_uring.c @@ -231,7 +231,7 @@ static int ioq_submit(LuringState *s) trace_luring_io_uring_submit(s, ret); /* Prevent infinite loop if submission is refused */ if (ret <= 0) { - if (ret == -EAGAIN) { + if (ret == -EAGAIN || ret == -EINTR) { continue; } break;
As recently documented [1], io_uring_enter(2) syscall can return an error (errno=EINTR) if the operation was interrupted by a delivery of a signal before it could complete. This should happen when IORING_ENTER_GETEVENTS flag is used, for example during io_uring_submit_and_wait() or during io_uring_submit() when IORING_SETUP_IOPOLL is enabled. We shouldn't have this problem for now, but it's better to prevent it. [1] https://github.com/axboe/liburing/commit/344355ec6619de8f4e64584c9736530b5346e4f4 Signed-off-by: Stefano Garzarella <sgarzare@redhat.com> --- block/io_uring.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)