Blame SOURCES/kvm-vhost-user-blk-Improve-error-reporting-in-realize.patch

a83cc2
From a0fcc5faf35fb266dbe45259b79a57ba057e3144 Mon Sep 17 00:00:00 2001
a83cc2
From: Kevin Wolf <kwolf@redhat.com>
a83cc2
Date: Mon, 12 Jul 2021 10:22:28 -0400
a83cc2
Subject: [PATCH 08/43] vhost-user-blk: Improve error reporting in realize
a83cc2
a83cc2
RH-Author: Miroslav Rezanina <mrezanin@redhat.com>
a83cc2
RH-Bugzilla: 1957194
a83cc2
a83cc2
Now that vhost_user_blk_connect() is not called from an event handler
a83cc2
any more, but directly from vhost_user_blk_device_realize(), we can
a83cc2
actually make use of Error again instead of calling error_report() in
a83cc2
the inner function and setting a more generic and therefore less useful
a83cc2
error message in realize() itself.
a83cc2
a83cc2
With Error, the callers are responsible for adding context if necessary
a83cc2
(such as the "-device" option the error refers to). Additional prefixes
a83cc2
are redundant and better omitted.
a83cc2
a83cc2
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
a83cc2
Acked-by: Raphael Norwitz <raphael.norwitz@nutanix.com>
a83cc2
Message-Id: <20210429171316.162022-4-kwolf@redhat.com>
a83cc2
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
a83cc2
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
a83cc2
(cherry picked from commit 5b9243d2654adc58ce472d0536a7a177b4fe0f90)
a83cc2
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
a83cc2
Signed-off-by: Danilo C. L. de Paula <ddepaula@redhat.com>
a83cc2
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
a83cc2
---
a83cc2
 hw/block/vhost-user-blk.c | 23 +++++++++++------------
a83cc2
 1 file changed, 11 insertions(+), 12 deletions(-)
a83cc2
a83cc2
diff --git a/hw/block/vhost-user-blk.c b/hw/block/vhost-user-blk.c
a83cc2
index c0b9958da1..f3a45af97c 100644
a83cc2
--- a/hw/block/vhost-user-blk.c
a83cc2
+++ b/hw/block/vhost-user-blk.c
a83cc2
@@ -311,7 +311,7 @@ static void vhost_user_blk_reset(VirtIODevice *vdev)
a83cc2
     vhost_dev_free_inflight(s->inflight);
a83cc2
 }
a83cc2
 
a83cc2
-static int vhost_user_blk_connect(DeviceState *dev)
a83cc2
+static int vhost_user_blk_connect(DeviceState *dev, Error **errp)
a83cc2
 {
a83cc2
     VirtIODevice *vdev = VIRTIO_DEVICE(dev);
a83cc2
     VHostUserBlk *s = VHOST_USER_BLK(vdev);
a83cc2
@@ -331,8 +331,7 @@ static int vhost_user_blk_connect(DeviceState *dev)
a83cc2
 
a83cc2
     ret = vhost_dev_init(&s->dev, &s->vhost_user, VHOST_BACKEND_TYPE_USER, 0);
a83cc2
     if (ret < 0) {
a83cc2
-        error_report("vhost-user-blk: vhost initialization failed: %s",
a83cc2
-                     strerror(-ret));
a83cc2
+        error_setg_errno(errp, -ret, "vhost initialization failed");
a83cc2
         return ret;
a83cc2
     }
a83cc2
 
a83cc2
@@ -340,8 +339,7 @@ static int vhost_user_blk_connect(DeviceState *dev)
a83cc2
     if (virtio_device_started(vdev, vdev->status)) {
a83cc2
         ret = vhost_user_blk_start(vdev);
a83cc2
         if (ret < 0) {
a83cc2
-            error_report("vhost-user-blk: vhost start failed: %s",
a83cc2
-                         strerror(-ret));
a83cc2
+            error_setg_errno(errp, -ret, "vhost start failed");
a83cc2
             return ret;
a83cc2
         }
a83cc2
     }
a83cc2
@@ -380,10 +378,12 @@ static void vhost_user_blk_event(void *opaque, QEMUChrEvent event)
a83cc2
     DeviceState *dev = opaque;
a83cc2
     VirtIODevice *vdev = VIRTIO_DEVICE(dev);
a83cc2
     VHostUserBlk *s = VHOST_USER_BLK(vdev);
a83cc2
+    Error *local_err = NULL;
a83cc2
 
a83cc2
     switch (event) {
a83cc2
     case CHR_EVENT_OPENED:
a83cc2
-        if (vhost_user_blk_connect(dev) < 0) {
a83cc2
+        if (vhost_user_blk_connect(dev, &local_err) < 0) {
a83cc2
+            error_report_err(local_err);
a83cc2
             qemu_chr_fe_disconnect(&s->chardev);
a83cc2
             return;
a83cc2
         }
a83cc2
@@ -426,7 +426,7 @@ static void vhost_user_blk_device_realize(DeviceState *dev, Error **errp)
a83cc2
     int i, ret;
a83cc2
 
a83cc2
     if (!s->chardev.chr) {
a83cc2
-        error_setg(errp, "vhost-user-blk: chardev is mandatory");
a83cc2
+        error_setg(errp, "chardev is mandatory");
a83cc2
         return;
a83cc2
     }
a83cc2
 
a83cc2
@@ -434,16 +434,16 @@ static void vhost_user_blk_device_realize(DeviceState *dev, Error **errp)
a83cc2
         s->num_queues = 1;
a83cc2
     }
a83cc2
     if (!s->num_queues || s->num_queues > VIRTIO_QUEUE_MAX) {
a83cc2
-        error_setg(errp, "vhost-user-blk: invalid number of IO queues");
a83cc2
+        error_setg(errp, "invalid number of IO queues");
a83cc2
         return;
a83cc2
     }
a83cc2
 
a83cc2
     if (!s->queue_size) {
a83cc2
-        error_setg(errp, "vhost-user-blk: queue size must be non-zero");
a83cc2
+        error_setg(errp, "queue size must be non-zero");
a83cc2
         return;
a83cc2
     }
a83cc2
     if (s->queue_size > VIRTQUEUE_MAX_SIZE) {
a83cc2
-        error_setg(errp, "vhost-user-blk: queue size must not exceed %d",
a83cc2
+        error_setg(errp, "queue size must not exceed %d",
a83cc2
                    VIRTQUEUE_MAX_SIZE);
a83cc2
         return;
a83cc2
     }
a83cc2
@@ -469,8 +469,7 @@ static void vhost_user_blk_device_realize(DeviceState *dev, Error **errp)
a83cc2
         goto virtio_err;
a83cc2
     }
a83cc2
 
a83cc2
-    if (vhost_user_blk_connect(dev) < 0) {
a83cc2
-        error_setg(errp, "vhost-user-blk: could not connect");
a83cc2
+    if (vhost_user_blk_connect(dev, errp) < 0) {
a83cc2
         qemu_chr_fe_disconnect(&s->chardev);
a83cc2
         goto virtio_err;
a83cc2
     }
a83cc2
-- 
a83cc2
2.27.0
a83cc2