On 21.10.25 02:35, Raphael Norwitz wrote:
On Thu, Oct 16, 2025 at 7:48 AM Vladimir Sementsov-Ogievskiy
<[email protected]> wrote:

We'll need to postpone further connecting/reconnecting logic to the
later point to support backend-transfer migration for vhost-user-blk.
For now, move first call to vhost_user_blk_init() to _realize() (this
call will not be postponed). To support this, we also have to move
re-initialization to vhost_user_blk_realize_connect_loop().

Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]>
---
  hw/block/vhost-user-blk.c | 17 ++++++++++++++---
  1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/hw/block/vhost-user-blk.c b/hw/block/vhost-user-blk.c
index 36e32229ad..af4a97b8e4 100644
--- a/hw/block/vhost-user-blk.c
+++ b/hw/block/vhost-user-blk.c
@@ -464,14 +464,12 @@ static int vhost_user_blk_realize_connect(VHostUserBlk 
*s, Error **errp)
      DeviceState *dev = DEVICE(s);
      int ret;

-    s->connected = false;
-
      ret = qemu_chr_fe_wait_connected(&s->chardev, errp);
      if (ret < 0) {
          return ret;
      }

-    ret = vhost_user_blk_init(dev, true, errp);
+    ret = vhost_user_blk_connect(dev, errp);
      if (ret < 0) {
          qemu_chr_fe_disconnect(&s->chardev);
          return ret;
@@ -501,7 +499,16 @@ static int 
vhost_user_blk_realize_connect_loop(VHostUserBlk *s, Error **errp)
              error_prepend(errp, "Reconnecting after error: ");
              error_report_err(*errp);
              *errp = NULL;
+
+            s->connected = false;
+
+            ret = vhost_user_blk_init(dev, false, errp);
+            if (ret < 0) {
+                /* No reason to retry initialization */
+                return ret;
+            }
          }
+
          ret = vhost_user_blk_realize_connect(s, errp);
      } while (ret < 0 && retries--);

@@ -566,6 +573,10 @@ 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);


Why call vhost_user_blk_init() here if we call it in
host_user_blk_realize_connect_loop()?

To be able to postpone the whole realize-connect-loop to the later
point (not in realize) in further commits.

So this first init will stay in realize, for early initialization of the device.


+    if (vhost_user_blk_init(dev, false, errp) < 0) {
+        goto fail;
+    }
+
      if (vhost_user_blk_realize_connect_loop(s, errp) < 0) {
          goto fail;
      }
--
2.48.1




--
Best regards,
Vladimir

Reply via email to