aboutsummaryrefslogtreecommitdiff
path: root/block
diff options
context:
space:
mode:
authorStefano Garzarella <sgarzare@redhat.com>2020-05-19 15:30:41 +0200
committerStefan Hajnoczi <stefanha@redhat.com>2020-06-05 09:54:48 +0100
commitb4e44c9944e19c8bfc7fbf0c4a6a5e48f3ba3dc0 (patch)
tree63c1eafe28b8391b48c587349ea9577af50645ea /block
parent66234fee9c2d37bfbc523aa8d0ae5300a14cc10e (diff)
downloadqemu-b4e44c9944e19c8bfc7fbf0c4a6a5e48f3ba3dc0.zip
qemu-b4e44c9944e19c8bfc7fbf0c4a6a5e48f3ba3dc0.tar.gz
qemu-b4e44c9944e19c8bfc7fbf0c4a6a5e48f3ba3dc0.tar.bz2
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>
Diffstat (limited to 'block')
-rw-r--r--block/io_uring.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/block/io_uring.c b/block/io_uring.c
index a3142ca..9765681 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;