Skip to content

Commit

Permalink
vhost-user-blk: Improve error reporting in realize
Browse files Browse the repository at this point in the history
Now that vhost_user_blk_connect() is not called from an event handler
any more, but directly from vhost_user_blk_device_realize(), we can
actually make use of Error again instead of calling error_report() in
the inner function and setting a more generic and therefore less useful
error message in realize() itself.

With Error, the callers are responsible for adding context if necessary
(such as the "-device" option the error refers to). Additional prefixes
are redundant and better omitted.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Acked-by: Raphael Norwitz <raphael.norwitz@nutanix.com>
Message-Id: <20210429171316.162022-4-kwolf@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
  • Loading branch information
kevmw committed May 18, 2021
1 parent dabefdd commit 5b9243d
Showing 1 changed file with 11 additions and 12 deletions.
23 changes: 11 additions & 12 deletions hw/block/vhost-user-blk.c
Expand Up @@ -311,7 +311,7 @@ static void vhost_user_blk_reset(VirtIODevice *vdev)
vhost_dev_free_inflight(s->inflight);
}

static int vhost_user_blk_connect(DeviceState *dev)
static int vhost_user_blk_connect(DeviceState *dev, Error **errp)
{
VirtIODevice *vdev = VIRTIO_DEVICE(dev);
VHostUserBlk *s = VHOST_USER_BLK(vdev);
Expand All @@ -331,17 +331,15 @@ static int vhost_user_blk_connect(DeviceState *dev)

ret = vhost_dev_init(&s->dev, &s->vhost_user, VHOST_BACKEND_TYPE_USER, 0);
if (ret < 0) {
error_report("vhost-user-blk: vhost initialization failed: %s",
strerror(-ret));
error_setg_errno(errp, -ret, "vhost initialization failed");
return ret;
}

/* restore vhost state */
if (virtio_device_started(vdev, vdev->status)) {
ret = vhost_user_blk_start(vdev);
if (ret < 0) {
error_report("vhost-user-blk: vhost start failed: %s",
strerror(-ret));
error_setg_errno(errp, -ret, "vhost start failed");
return ret;
}
}
Expand Down Expand Up @@ -380,10 +378,12 @@ static void vhost_user_blk_event(void *opaque, QEMUChrEvent event)
DeviceState *dev = opaque;
VirtIODevice *vdev = VIRTIO_DEVICE(dev);
VHostUserBlk *s = VHOST_USER_BLK(vdev);
Error *local_err = NULL;

switch (event) {
case CHR_EVENT_OPENED:
if (vhost_user_blk_connect(dev) < 0) {
if (vhost_user_blk_connect(dev, &local_err) < 0) {
error_report_err(local_err);
qemu_chr_fe_disconnect(&s->chardev);
return;
}
Expand Down Expand Up @@ -426,24 +426,24 @@ static void vhost_user_blk_device_realize(DeviceState *dev, Error **errp)
int i, ret;

if (!s->chardev.chr) {
error_setg(errp, "vhost-user-blk: chardev is mandatory");
error_setg(errp, "chardev is mandatory");
return;
}

if (s->num_queues == VHOST_USER_BLK_AUTO_NUM_QUEUES) {
s->num_queues = 1;
}
if (!s->num_queues || s->num_queues > VIRTIO_QUEUE_MAX) {
error_setg(errp, "vhost-user-blk: invalid number of IO queues");
error_setg(errp, "invalid number of IO queues");
return;
}

if (!s->queue_size) {
error_setg(errp, "vhost-user-blk: queue size must be non-zero");
error_setg(errp, "queue size must be non-zero");
return;
}
if (s->queue_size > VIRTQUEUE_MAX_SIZE) {
error_setg(errp, "vhost-user-blk: queue size must not exceed %d",
error_setg(errp, "queue size must not exceed %d",
VIRTQUEUE_MAX_SIZE);
return;
}
Expand All @@ -469,8 +469,7 @@ static void vhost_user_blk_device_realize(DeviceState *dev, Error **errp)
goto virtio_err;
}

if (vhost_user_blk_connect(dev) < 0) {
error_setg(errp, "vhost-user-blk: could not connect");
if (vhost_user_blk_connect(dev, errp) < 0) {
qemu_chr_fe_disconnect(&s->chardev);
goto virtio_err;
}
Expand Down

0 comments on commit 5b9243d

Please sign in to comment.