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); + 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
