qemu with hax to log dma reads & writes jcs.org/2018/11/12/vfio

io_uring: retry io_uring_submit() if it fails with errno=EINTR

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>
Message-id: 20200519133041.112138-1-sgarzare@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>

authored by

Stefano Garzarella and committed by
Stefan Hajnoczi
b4e44c99 66234fee

+1 -1
+1 -1
block/io_uring.c
··· 231 231 trace_luring_io_uring_submit(s, ret); 232 232 /* Prevent infinite loop if submission is refused */ 233 233 if (ret <= 0) { 234 - if (ret == -EAGAIN) { 234 + if (ret == -EAGAIN || ret == -EINTR) { 235 235 continue; 236 236 } 237 237 break;