All of lore.kernel.org
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: Li Feng <fengli@smartx.com>
Cc: "Michael S. Tsirkin" <mst@redhat.com>,
	"Raphael Norwitz" <raphael.norwitz@nutanix.com>,
	"Kevin Wolf" <kwolf@redhat.com>,
	"Hanna Reitz" <hreitz@redhat.com>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Fam Zheng" <fam@euphon.net>,
	"Alex Bennée" <alex.bennee@linaro.org>,
	"Viresh Kumar" <viresh.kumar@linaro.org>,
	qemu-block@nongnu.org (open list:Block layer core),
	qemu-devel@nongnu.org (open list:All patches CC here)
Subject: Re: [PATCH v3 2/2] vhost: Add Error parameter to vhost_scsi_common_start()
Date: Fri, 01 Sep 2023 14:00:50 +0200	[thread overview]
Message-ID: <877cpa85n1.fsf@pond.sub.org> (raw)
In-Reply-To: <20230830045722.611224-3-fengli@smartx.com> (Li Feng's message of "Wed, 30 Aug 2023 12:57:14 +0800")

Li Feng <fengli@smartx.com> writes:

> Add a Error parameter to report the real error, like vhost-user-blk.
>
> Signed-off-by: Li Feng <fengli@smartx.com>
> ---
>  hw/scsi/vhost-scsi-common.c           | 16 +++++++++-------
>  hw/scsi/vhost-scsi.c                  |  5 +++--
>  hw/scsi/vhost-user-scsi.c             | 14 ++++++++------
>  include/hw/virtio/vhost-scsi-common.h |  2 +-
>  4 files changed, 21 insertions(+), 16 deletions(-)
>
> diff --git a/hw/scsi/vhost-scsi-common.c b/hw/scsi/vhost-scsi-common.c
> index a61cd0e907..4c8637045d 100644
> --- a/hw/scsi/vhost-scsi-common.c
> +++ b/hw/scsi/vhost-scsi-common.c
> @@ -16,6 +16,7 @@
>   */
>  
>  #include "qemu/osdep.h"
> +#include "qapi/error.h"
>  #include "qemu/error-report.h"
>  #include "qemu/module.h"
>  #include "hw/virtio/vhost.h"
> @@ -25,7 +26,7 @@
>  #include "hw/virtio/virtio-access.h"
>  #include "hw/fw-path-provider.h"
>  
> -int vhost_scsi_common_start(VHostSCSICommon *vsc)
> +int vhost_scsi_common_start(VHostSCSICommon *vsc, Error **errp)
>  {
>      int ret, i;
>      VirtIODevice *vdev = VIRTIO_DEVICE(vsc);
> @@ -35,18 +36,19 @@ int vhost_scsi_common_start(VHostSCSICommon *vsc)
>      VirtIOSCSICommon *vs = (VirtIOSCSICommon *)vsc;
>  
>      if (!k->set_guest_notifiers) {
> -        error_report("binding does not support guest notifiers");
> +        error_setg(errp, "binding does not support guest notifiers");
>          return -ENOSYS;
>      }
>  
>      ret = vhost_dev_enable_notifiers(&vsc->dev, vdev);
>      if (ret < 0) {
> +        error_setg_errno(errp, -ret, "Error enabling host notifiers");

Looks like the error is silent before your patch.  Correct?

>          return ret;
>      }
>  
>      ret = k->set_guest_notifiers(qbus->parent, vsc->dev.nvqs, true);
>      if (ret < 0) {
> -        error_report("Error binding guest notifier");
> +        error_setg_errno(errp, -ret, "Error binding guest notifier");

Error message now provides more detail.

>          goto err_host_notifiers;
>      }
>  
> @@ -54,7 +56,7 @@ int vhost_scsi_common_start(VHostSCSICommon *vsc)
>  
>      ret = vhost_dev_prepare_inflight(&vsc->dev, vdev);
>      if (ret < 0) {
> -        error_report("Error setting inflight format: %d", -ret);
> +        error_setg_errno(errp, -ret, "Error setting inflight format");

Error message now shows errno in human-readable form.

>          goto err_guest_notifiers;
>      }
>  
> @@ -64,21 +66,21 @@ int vhost_scsi_common_start(VHostSCSICommon *vsc)
>                                          vs->conf.virtqueue_size,
>                                          vsc->inflight);
>              if (ret < 0) {
> -                error_report("Error getting inflight: %d", -ret);
> +                error_setg_errno(errp, -ret, "Error getting inflight");

Likewise.

>                  goto err_guest_notifiers;
>              }
>          }
>  
>          ret = vhost_dev_set_inflight(&vsc->dev, vsc->inflight);
>          if (ret < 0) {
> -            error_report("Error setting inflight: %d", -ret);
> +            error_setg_errno(errp, -ret, "Error setting inflight");

Likewise.

>              goto err_guest_notifiers;
>          }
>      }
>  
>      ret = vhost_dev_start(&vsc->dev, vdev, true);
>      if (ret < 0) {
> -        error_report("Error start vhost dev");
> +        error_setg_errno(errp, -ret, "Error starting vhost dev");

Likewise.

>          goto err_guest_notifiers;
>      }
>  
> diff --git a/hw/scsi/vhost-scsi.c b/hw/scsi/vhost-scsi.c
> index 443f67daa4..01a3ab4277 100644
> --- a/hw/scsi/vhost-scsi.c
> +++ b/hw/scsi/vhost-scsi.c
> @@ -75,6 +75,7 @@ static int vhost_scsi_start(VHostSCSI *s)
>      int ret, abi_version;
>      VHostSCSICommon *vsc = VHOST_SCSI_COMMON(s);
>      const VhostOps *vhost_ops = vsc->dev.vhost_ops;
> +    Error *local_err = NULL;
>  
>      ret = vhost_ops->vhost_scsi_get_abi_version(&vsc->dev, &abi_version);
>      if (ret < 0) {
> @@ -88,14 +89,14 @@ static int vhost_scsi_start(VHostSCSI *s)
>          return -ENOSYS;
>      }
>  
> -    ret = vhost_scsi_common_start(vsc);
> +    ret = vhost_scsi_common_start(vsc, &local_err);
>      if (ret < 0) {
>          return ret;
>      }
>  
>      ret = vhost_scsi_set_endpoint(s);
>      if (ret < 0) {
> -        error_report("Error setting vhost-scsi endpoint");
> +        error_reportf_err(local_err, "Error setting vhost-scsi endpoint");
>          vhost_scsi_common_stop(vsc);
>      }
>  
> diff --git a/hw/scsi/vhost-user-scsi.c b/hw/scsi/vhost-user-scsi.c
> index e931df9f5b..62fc98bb1c 100644
> --- a/hw/scsi/vhost-user-scsi.c
> +++ b/hw/scsi/vhost-user-scsi.c
> @@ -43,12 +43,12 @@ enum VhostUserProtocolFeature {
>      VHOST_USER_PROTOCOL_F_RESET_DEVICE = 13,
>  };
>  
> -static int vhost_user_scsi_start(VHostUserSCSI *s)
> +static int vhost_user_scsi_start(VHostUserSCSI *s, Error **errp)
>  {
>      VHostSCSICommon *vsc = VHOST_SCSI_COMMON(s);
>      int ret;
>  
> -    ret = vhost_scsi_common_start(vsc);
> +    ret = vhost_scsi_common_start(vsc, errp);
>      s->started_vu = (ret < 0 ? false : true);
>  
>      return ret;
> @@ -73,6 +73,7 @@ static void vhost_user_scsi_set_status(VirtIODevice *vdev, uint8_t status)
>      VHostSCSICommon *vsc = VHOST_SCSI_COMMON(s);
>      VirtIOSCSICommon *vs = VIRTIO_SCSI_COMMON(dev);
>      bool should_start = virtio_device_should_start(vdev, status);
> +    Error *local_err = NULL;
>      int ret;
>  
>      if (!s->connected) {
> @@ -84,9 +85,10 @@ static void vhost_user_scsi_set_status(VirtIODevice *vdev, uint8_t status)
>      }
>  
>      if (should_start) {
> -        ret = vhost_user_scsi_start(s);
> +        ret = vhost_user_scsi_start(s, &local_err);
>          if (ret < 0) {
> -            error_report("unable to start vhost-user-scsi: %s", strerror(-ret));
> +            error_reportf_err(local_err, "unable to start vhost-user-scsi: %s",
> +                              strerror(-ret));
>              qemu_chr_fe_disconnect(&vs->conf.chardev);
>          }
>      } else {
> @@ -139,7 +141,7 @@ static void vhost_user_scsi_handle_output(VirtIODevice *vdev, VirtQueue *vq)
>       * Some guests kick before setting VIRTIO_CONFIG_S_DRIVER_OK so start
>       * vhost here instead of waiting for .set_status().
>       */
> -    ret = vhost_user_scsi_start(s);
> +    ret = vhost_user_scsi_start(s, &local_err);
>      if (ret < 0) {
>          error_reportf_err(local_err, "vhost-user-scsi: vhost start failed: ");

The error_reportf_err() is wrong before the patch, as I just pointed out
in my review of "[PATCH v3 5/5] vhost-user-scsi: start vhost when guest
kicks".  It is correct afterwards.

>          qemu_chr_fe_disconnect(&vs->conf.chardev);
> @@ -184,7 +186,7 @@ static int vhost_user_scsi_connect(DeviceState *dev, Error **errp)
>  
>      /* restore vhost state */
>      if (virtio_device_started(vdev, vdev->status)) {
> -        ret = vhost_user_scsi_start(s);
> +        ret = vhost_user_scsi_start(s, errp);
>          if (ret < 0) {
>              return ret;
>          }

Wrong before the patch, as I just pointed out in my review of "[PATCH v3
4/5] vhost-user-scsi: support reconnect to backend".  Correct afterwards.

> diff --git a/include/hw/virtio/vhost-scsi-common.h b/include/hw/virtio/vhost-scsi-common.h
> index 18f115527c..c5d2c09455 100644
> --- a/include/hw/virtio/vhost-scsi-common.h
> +++ b/include/hw/virtio/vhost-scsi-common.h
> @@ -39,7 +39,7 @@ struct VHostSCSICommon {
>      struct vhost_inflight *inflight;
>  };
>  
> -int vhost_scsi_common_start(VHostSCSICommon *vsc);
> +int vhost_scsi_common_start(VHostSCSICommon *vsc, Error **errp);
>  void vhost_scsi_common_stop(VHostSCSICommon *vsc);
>  char *vhost_scsi_common_get_fw_dev_path(FWPathProvider *p, BusState *bus,
>                                          DeviceState *dev);

Please mention in the commit message that error messages improve, and
silent errors are now reported.



  parent reply	other threads:[~2023-09-01 12:02 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-04  5:29 [PATCH 0/2] Fix vhost reconnect issues Li Feng
2023-08-04  5:29 ` [PATCH 1/2] vhost-user: fix lost reconnect Li Feng
2023-08-14 12:11   ` Raphael Norwitz
2023-08-17  6:40     ` Li Feng
2023-08-22  0:38       ` Raphael Norwitz
2023-08-22  4:49         ` Li Feng
2023-08-22 10:17           ` Raphael Norwitz
2023-08-24  7:27             ` Li Feng
2023-08-04  5:29 ` [PATCH 2/2] vhost: Add Error parameter to vhost_scsi_common_start() Li Feng
2023-08-14 12:11   ` Raphael Norwitz
2023-08-17  6:49     ` Li Feng
2023-08-21 12:09       ` Markus Armbruster
2023-08-22  4:47         ` Li Feng
2023-08-24  7:41 ` [PATCH v2 0/2] Fix vhost reconnect issues Li Feng
2023-08-24  7:41   ` [PATCH v2 1/2] vhost-user: Fix lost reconnect Li Feng
2023-08-29 22:11     ` Raphael Norwitz
2023-08-30  4:51       ` Li Feng
2023-08-24  7:41   ` [PATCH v2 2/2] vhost: Add Error parameter to vhost_scsi_common_start() Li Feng
2023-08-29 22:20     ` Raphael Norwitz
2023-08-30  4:57 ` [PATCH v3 0/2] Fix vhost reconnect issues Li Feng
2023-08-30  4:57   ` [PATCH v3 1/2] vhost-user: Fix lost reconnect Li Feng
2023-08-30  8:47     ` Raphael Norwitz
2023-08-30  4:57   ` [PATCH v3 2/2] vhost: Add Error parameter to vhost_scsi_common_start() Li Feng
2023-08-30  8:51     ` Raphael Norwitz
2023-09-01 12:00     ` Markus Armbruster [this message]
2023-09-12  8:32       ` Li Feng
2023-10-01 20:00         ` Michael S. Tsirkin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=877cpa85n1.fsf@pond.sub.org \
    --to=armbru@redhat.com \
    --cc=alex.bennee@linaro.org \
    --cc=fam@euphon.net \
    --cc=fengli@smartx.com \
    --cc=hreitz@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=raphael.norwitz@nutanix.com \
    --cc=viresh.kumar@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.