Simplify _realize function, and prepare to further changes. While being here, also rename virtio_err: label to more generic fail:, virtio_err doesn't improve readability here.
Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]> --- hw/block/vhost-user-blk.c | 54 +++++++++++++++++++++++---------------- 1 file changed, 32 insertions(+), 22 deletions(-) diff --git a/hw/block/vhost-user-blk.c b/hw/block/vhost-user-blk.c index 9c727c3977..36e32229ad 100644 --- a/hw/block/vhost-user-blk.c +++ b/hw/block/vhost-user-blk.c @@ -489,14 +489,40 @@ static int vhost_user_blk_realize_connect(VHostUserBlk *s, Error **errp) return 0; } -static void vhost_user_blk_device_realize(DeviceState *dev, Error **errp) +static int vhost_user_blk_realize_connect_loop(VHostUserBlk *s, Error **errp) { ERRP_GUARD(); + DeviceState *dev = DEVICE(s); + int ret, retries = VU_REALIZE_CONN_RETRIES; + + 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 < 0 && retries--); + + if (ret < 0) { + return ret; + } + + /* we're fully initialized, now we can operate, so add the handler */ + qemu_chr_fe_set_handlers(&s->chardev, NULL, NULL, + vhost_user_blk_event, NULL, (void *)dev, + NULL, true); + + return 0; +} + +static void vhost_user_blk_device_realize(DeviceState *dev, Error **errp) +{ VirtIODevice *vdev = VIRTIO_DEVICE(dev); VHostUserBlk *s = VHOST_USER_BLK(vdev); size_t config_size; - int retries; - int i, ret; + int i; trace_vhost_user_blk_device_realize_in(vdev); @@ -540,31 +566,15 @@ 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); - retries = VU_REALIZE_CONN_RETRIES; - 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 < 0 && retries--); - - if (ret < 0) { - goto virtio_err; + if (vhost_user_blk_realize_connect_loop(s, errp) < 0) { + goto fail; } - /* we're fully initialized, now we can operate, so add the handler */ - qemu_chr_fe_set_handlers(&s->chardev, NULL, NULL, - vhost_user_blk_event, NULL, (void *)dev, - NULL, true); - trace_vhost_user_blk_device_realize_out(vdev); return; -virtio_err: +fail: g_free(s->vhost_vqs); s->vhost_vqs = NULL; g_free(s->inflight); -- 2.48.1
