Re: [Qemu-devel] [RFC v2 03/12] vhost-user: wrap some read/write with retry handling

2018-06-08 Thread Philippe Mathieu-Daudé
On 06/01/2018 01:27 PM, Marc-André Lureau wrote:
> Signed-off-by: Marc-André Lureau 

Reviewed-by: Philippe Mathieu-Daudé 

> ---
>  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 ca554d4ff1..cc9298792d 100644
> --- a/hw/virtio/vhost-user.c
> +++ b/hw/virtio/vhost-user.c
> @@ -869,7 +869,10 @@ static void slave_read(void *opaque)
>  iov.iov_base = 
>  iov.iov_len = VHOST_USER_HDR_SIZE;
>  
> -size = recvmsg(u->slave_fd, , 0);
> +do {
> +size = recvmsg(u->slave_fd, , 0);
> +} while (size < 0 && (errno == EINTR || errno == EAGAIN));
> +
>  if (size != VHOST_USER_HDR_SIZE) {
>  error_report("Failed to read from slave.");
>  goto err;
> @@ -898,7 +901,10 @@ static void slave_read(void *opaque)
>  }
>  
>  /* Read payload */
> -size = read(u->slave_fd, , hdr.size);
> +do {
> +size = read(u->slave_fd, , hdr.size);
> +} while (size < 0 && (errno == EINTR || errno == EAGAIN));
> +
>  if (size != hdr.size) {
>  error_report("Failed to read payload from slave.");
>  goto err;
> @@ -941,7 +947,10 @@ static void slave_read(void *opaque)
>  iovec[1].iov_base = 
>  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;
> 



[Qemu-devel] [RFC v2 03/12] vhost-user: wrap some read/write with retry handling

2018-06-01 Thread Marc-André Lureau
Signed-off-by: Marc-André Lureau 
---
 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 ca554d4ff1..cc9298792d 100644
--- a/hw/virtio/vhost-user.c
+++ b/hw/virtio/vhost-user.c
@@ -869,7 +869,10 @@ static void slave_read(void *opaque)
 iov.iov_base = 
 iov.iov_len = VHOST_USER_HDR_SIZE;
 
-size = recvmsg(u->slave_fd, , 0);
+do {
+size = recvmsg(u->slave_fd, , 0);
+} while (size < 0 && (errno == EINTR || errno == EAGAIN));
+
 if (size != VHOST_USER_HDR_SIZE) {
 error_report("Failed to read from slave.");
 goto err;
@@ -898,7 +901,10 @@ static void slave_read(void *opaque)
 }
 
 /* Read payload */
-size = read(u->slave_fd, , hdr.size);
+do {
+size = read(u->slave_fd, , hdr.size);
+} while (size < 0 && (errno == EINTR || errno == EAGAIN));
+
 if (size != hdr.size) {
 error_report("Failed to read payload from slave.");
 goto err;
@@ -941,7 +947,10 @@ static void slave_read(void *opaque)
 iovec[1].iov_base = 
 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.17.1.906.g10fd178552