All of lore.kernel.org
 help / color / mirror / Atom feed
From: Raphael Norwitz <raphael.norwitz@nutanix.com>
To: Kevin Wolf <kwolf@redhat.com>
Cc: Raphael Norwitz <raphael.norwitz@nutanix.com>,
	"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>,
	"qemu-block@nongnu.org" <qemu-block@nongnu.org>,
	"mst@redhat.com" <mst@redhat.com>
Subject: Re: [PATCH 7/7] vhost-user-blk: Implement reconnection during realize
Date: Fri, 11 Jun 2021 20:15:02 +0000	[thread overview]
Message-ID: <20210611201500.GF26687@raphael-debian-dev> (raw)
In-Reply-To: <20210609154658.350308-8-kwolf@redhat.com>

On Wed, Jun 09, 2021 at 05:46:58PM +0200, Kevin Wolf wrote:
> Commit dabefdd6 removed code that was supposed to try reconnecting
> during .realize(), but actually just crashed and had several design
> problems.
> 
> This adds the feature back without the crash in simple cases while also
> fixing some design problems: Reconnection is now only tried if there was
> a problem with the connection and not an error related to the content
> (which would fail again the same way in the next attempt). Reconnection
> is limited to three attempts (four with the initial attempt) so that we
> won't end up in an infinite loop if a problem is permanent. If the
> backend restarts three times in the very short time window of device
> initialisation, we have bigger problems and erroring out is the right
> course of action.
> 
> In the case that a connection error occurs and we reconnect, the error
> message is printed using error_report_err(), but otherwise ignored.
> 
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>

Reviewed-by: Raphael Norwitz <raphael.norwitz@nutanix.com>

> ---
>  hw/block/vhost-user-blk.c | 14 +++++++++++++-
>  1 file changed, 13 insertions(+), 1 deletion(-)
> 
> diff --git a/hw/block/vhost-user-blk.c b/hw/block/vhost-user-blk.c
> index e49d2e4c83..f75a42bc62 100644
> --- a/hw/block/vhost-user-blk.c
> +++ b/hw/block/vhost-user-blk.c
> @@ -455,8 +455,10 @@ static int vhost_user_blk_realize_connect(VHostUserBlk *s, Error **errp)
>  
>  static void vhost_user_blk_device_realize(DeviceState *dev, Error **errp)
>  {
> +    ERRP_GUARD();
>      VirtIODevice *vdev = VIRTIO_DEVICE(dev);
>      VHostUserBlk *s = VHOST_USER_BLK(vdev);
> +    int retries;
>      int i, ret;
>  
>      if (!s->chardev.chr) {
> @@ -498,7 +500,17 @@ static void vhost_user_blk_device_realize(DeviceState *dev, Error **errp)
>      s->inflight = g_new0(struct vhost_inflight, 1);
>      s->vhost_vqs = g_new0(struct vhost_virtqueue, s->num_queues);
>  
> -    ret = vhost_user_blk_realize_connect(s, errp);
> +    retries = 3;
> +    assert(!*errp);
> +    do {
> +        if (*errp) {
> +            error_prepend(errp, "Reconnecting after error: ");
> +            error_report_err(*errp);
> +            *errp = NULL;
> +        }
> +        ret = vhost_user_blk_realize_connect(s, errp);
> +    } while (ret == -EPROTO && retries--);
> +
>      if (ret < 0) {
>          goto virtio_err;
>      }
> -- 
> 2.30.2
> 

  parent reply	other threads:[~2021-06-11 20:16 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-09 15:46 [PATCH 0/7] vhost-user-blk: Implement reconnection during realize Kevin Wolf
2021-06-09 15:46 ` [PATCH 1/7] vhost: Add Error parameter to vhost_dev_init() Kevin Wolf
2021-06-10  9:05   ` Stefano Garzarella
2021-06-11 19:14   ` Raphael Norwitz
2021-06-09 15:46 ` [PATCH 2/7] vhost: Distinguish errors in vhost_backend_init() Kevin Wolf
2021-06-10  9:07   ` Stefano Garzarella
2021-06-11 19:43   ` Raphael Norwitz
2021-06-09 15:46 ` [PATCH 3/7] vhost: Return 0/-errno in vhost_dev_init() Kevin Wolf
2021-06-10  9:09   ` Stefano Garzarella
2021-06-11 19:49   ` Raphael Norwitz
2021-06-09 15:46 ` [PATCH 4/7] vhost-user-blk: Add Error parameter to vhost_user_blk_start() Kevin Wolf
2021-06-10  9:11   ` Stefano Garzarella
2021-06-11 19:55   ` Raphael Norwitz
2021-06-09 15:46 ` [PATCH 5/7] vhost: Distinguish errors in vhost_dev_get_config() Kevin Wolf
2021-06-10  9:16   ` Stefano Garzarella
2021-06-11 20:08   ` Raphael Norwitz
2021-06-09 15:46 ` [PATCH 6/7] vhost-user-blk: Factor out vhost_user_blk_realize_connect() Kevin Wolf
2021-06-10  9:18   ` Stefano Garzarella
2021-06-11 20:11   ` Raphael Norwitz
2021-06-09 15:46 ` [PATCH 7/7] vhost-user-blk: Implement reconnection during realize Kevin Wolf
2021-06-10  9:23   ` Stefano Garzarella
2021-06-11 20:15   ` Raphael Norwitz [this message]
2021-06-30 12:39 ` [PATCH 0/7] " Kevin Wolf

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=20210611201500.GF26687@raphael-debian-dev \
    --to=raphael.norwitz@nutanix.com \
    --cc=kwolf@redhat.com \
    --cc=mst@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.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.