[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v4 05/12] vhost-user: wrap some read/write with retr
From: |
Marc-André Lureau |
Subject: |
[Qemu-devel] [PATCH v4 05/12] vhost-user: wrap some read/write with retry handling |
Date: |
Wed, 27 Feb 2019 11:30:10 +0100 |
Signed-off-by: Marc-André Lureau <address@hidden>
Reviewed-by: Philippe Mathieu-Daudé <address@hidden>
---
hw/virtio/vhost-user.c | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c
index a0e8a81857..b2e1175c1e 100644
--- a/hw/virtio/vhost-user.c
+++ b/hw/virtio/vhost-user.c
@@ -964,7 +964,10 @@ static void slave_read(void *opaque)
iov.iov_base = &hdr;
iov.iov_len = VHOST_USER_HDR_SIZE;
- size = recvmsg(u->slave_fd, &msgh, 0);
+ do {
+ size = recvmsg(u->slave_fd, &msgh, 0);
+ } while (size < 0 && (errno == EINTR || errno == EAGAIN));
+
if (size != VHOST_USER_HDR_SIZE) {
error_report("Failed to read from slave.");
goto err;
@@ -993,7 +996,10 @@ static void slave_read(void *opaque)
}
/* Read payload */
- size = read(u->slave_fd, &payload, hdr.size);
+ do {
+ size = read(u->slave_fd, &payload, hdr.size);
+ } while (size < 0 && (errno == EINTR || errno == EAGAIN));
+
if (size != hdr.size) {
error_report("Failed to read payload from slave.");
goto err;
@@ -1041,7 +1047,10 @@ static void slave_read(void *opaque)
iovec[1].iov_base = &payload;
iovec[1].iov_len = hdr.size;
- size = writev(u->slave_fd, iovec, ARRAY_SIZE(iovec));
+ do {
+ size = writev(u->slave_fd, iovec, ARRAY_SIZE(iovec));
+ } while (size < 0 && (errno == EINTR || errno == EAGAIN));
+
if (size != VHOST_USER_HDR_SIZE + hdr.size) {
error_report("Failed to send msg reply to slave.");
goto err;
--
2.21.0
- [Qemu-devel] [PATCH v4 00/12] vhost-user-backend & vhost-user-input, Marc-André Lureau, 2019/02/27
- [Qemu-devel] [PATCH v4 06/12] Add vhost-user-backend, Marc-André Lureau, 2019/02/27
- [Qemu-devel] [PATCH v4 12/12] contrib: add vhost-user-input, Marc-André Lureau, 2019/02/27
- [Qemu-devel] [PATCH v4 10/12] libvhost-user: add vu_queue_unpop(), Marc-André Lureau, 2019/02/27
- [Qemu-devel] [PATCH v4 05/12] vhost-user: wrap some read/write with retry handling,
Marc-André Lureau <=
- [Qemu-devel] [PATCH v4 03/12] vhost-user: simplify vhost_user_init/vhost_user_cleanup, Marc-André Lureau, 2019/02/27
- [Qemu-devel] [PATCH v4 11/12] Add vhost-user-input-pci, Marc-André Lureau, 2019/02/27
- [Qemu-devel] [PATCH v4 02/12] vhost-user: define conventions for vhost-user backends, Marc-André Lureau, 2019/02/27
- [Qemu-devel] [PATCH v4 04/12] libvhost-user: exit by default on VHOST_USER_NONE, Marc-André Lureau, 2019/02/27
- [Qemu-devel] [PATCH v4 08/12] vhost-user: add vhost_user_input_get_config(), Marc-André Lureau, 2019/02/27
- [Qemu-devel] [PATCH v4 07/12] vhost-user: split vhost_user_read(), Marc-André Lureau, 2019/02/27
- [Qemu-devel] [PATCH v4 01/12] libvhost-user: fix clang enum-conversion warning, Marc-André Lureau, 2019/02/27
- [Qemu-devel] [PATCH v4 09/12] libvhost-user-glib: export vug_source_new(), Marc-André Lureau, 2019/02/27
- Re: [Qemu-devel] [PATCH v4 00/12] vhost-user-backend & vhost-user-input, Marc-André Lureau, 2019/02/27