From 3cb775b9aecec517e7d50bbef674302dc4c849fe Mon Sep 17 00:00:00 2001 From: Dariusz Stojaczyk Date: Fri, 30 Mar 2018 20:17:23 +0200 Subject: [PATCH] virtio: don't silence vhost-user errors All errors were being silenced in an upper virtio layer. This patch makes them properly propagate further. Change-Id: I289c810ff0f670c4ba1fbcf0804089639fa561a8 Signed-off-by: Dariusz Stojaczyk Reviewed-on: https://review.gerrithub.io/405918 Tested-by: SPDK Automated Test System Reviewed-by: Pawel Wodkowski Reviewed-by: Daniel Verkamp Reviewed-by: Jim Harris --- lib/virtio/virtio_user.c | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/lib/virtio/virtio_user.c b/lib/virtio/virtio_user.c index 226885470..35fbf7b4e 100644 --- a/lib/virtio/virtio_user.c +++ b/lib/virtio/virtio_user.c @@ -59,9 +59,7 @@ virtio_user_create_queue(struct virtio_dev *vdev, uint32_t queue_sel) file.index = queue_sel; file.fd = dev->callfds[queue_sel]; - dev->ops->send_request(dev, VHOST_USER_SET_VRING_CALL, &file); - - return 0; + return dev->ops->send_request(dev, VHOST_USER_SET_VRING_CALL, &file); } static int @@ -79,16 +77,26 @@ virtio_user_kick_queue(struct virtio_dev *vdev, uint32_t queue_sel) .log_guest_addr = 0, .flags = 0, /* disable log */ }; + int rc; state.index = queue_sel; state.num = vring->num; - dev->ops->send_request(dev, VHOST_USER_SET_VRING_NUM, &state); + rc = dev->ops->send_request(dev, VHOST_USER_SET_VRING_NUM, &state); + if (rc < 0) { + return rc; + } state.index = queue_sel; state.num = 0; /* no reservation */ - dev->ops->send_request(dev, VHOST_USER_SET_VRING_BASE, &state); + rc = dev->ops->send_request(dev, VHOST_USER_SET_VRING_BASE, &state); + if (rc < 0) { + return rc; + } - dev->ops->send_request(dev, VHOST_USER_SET_VRING_ADDR, &addr); + rc = dev->ops->send_request(dev, VHOST_USER_SET_VRING_ADDR, &addr); + if (rc < 0) { + return rc; + } /* Of all per virtqueue MSGs, make sure VHOST_USER_SET_VRING_KICK comes * lastly because vhost depends on this msg to judge if @@ -96,9 +104,7 @@ virtio_user_kick_queue(struct virtio_dev *vdev, uint32_t queue_sel) */ file.index = queue_sel; file.fd = dev->kickfds[queue_sel]; - dev->ops->send_request(dev, VHOST_USER_SET_VRING_KICK, &file); - - return 0; + return dev->ops->send_request(dev, VHOST_USER_SET_VRING_KICK, &file); } static int @@ -109,9 +115,8 @@ virtio_user_stop_queue(struct virtio_dev *vdev, uint32_t queue_sel) state.index = queue_sel; state.num = 0; - dev->ops->send_request(dev, VHOST_USER_GET_VRING_BASE, &state); - return 0; + return dev->ops->send_request(dev, VHOST_USER_GET_VRING_BASE, &state); } static int