mirror of https://github.com/xemu-project/xemu.git
vhost-user: fix the reconnect error
If the error occurs in vhost_dev_init, the value of s->connected is set to true in advance, and there is no chance to enter this function execution again in the future. Signed-off-by: Li Feng <fengli@smartx.com> Message-Id: <20231123055431.217792-2-fengli@smartx.com> Reviewed-by: Raphael Norwitz <raphael.norwitz@nutanix.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
2d37fe9e5e
commit
298d4f892e
|
@ -326,7 +326,6 @@ static int vhost_user_blk_connect(DeviceState *dev, Error **errp)
|
||||||
if (s->connected) {
|
if (s->connected) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
s->connected = true;
|
|
||||||
|
|
||||||
s->dev.num_queues = s->num_queues;
|
s->dev.num_queues = s->num_queues;
|
||||||
s->dev.nvqs = s->num_queues;
|
s->dev.nvqs = s->num_queues;
|
||||||
|
@ -343,15 +342,14 @@ static int vhost_user_blk_connect(DeviceState *dev, Error **errp)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
s->connected = true;
|
||||||
|
|
||||||
/* restore vhost state */
|
/* restore vhost state */
|
||||||
if (virtio_device_started(vdev, vdev->status)) {
|
if (virtio_device_started(vdev, vdev->status)) {
|
||||||
ret = vhost_user_blk_start(vdev, errp);
|
ret = vhost_user_blk_start(vdev, errp);
|
||||||
if (ret < 0) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vhost_user_blk_disconnect(DeviceState *dev)
|
static void vhost_user_blk_disconnect(DeviceState *dev)
|
||||||
|
|
|
@ -147,7 +147,6 @@ static int vhost_user_scsi_connect(DeviceState *dev, Error **errp)
|
||||||
if (s->connected) {
|
if (s->connected) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
s->connected = true;
|
|
||||||
|
|
||||||
vsc->dev.num_queues = vs->conf.num_queues;
|
vsc->dev.num_queues = vs->conf.num_queues;
|
||||||
vsc->dev.nvqs = VIRTIO_SCSI_VQ_NUM_FIXED + vs->conf.num_queues;
|
vsc->dev.nvqs = VIRTIO_SCSI_VQ_NUM_FIXED + vs->conf.num_queues;
|
||||||
|
@ -161,6 +160,8 @@ static int vhost_user_scsi_connect(DeviceState *dev, Error **errp)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
s->connected = true;
|
||||||
|
|
||||||
/* restore vhost state */
|
/* restore vhost state */
|
||||||
if (virtio_device_started(vdev, vdev->status)) {
|
if (virtio_device_started(vdev, vdev->status)) {
|
||||||
ret = vhost_user_scsi_start(s, errp);
|
ret = vhost_user_scsi_start(s, errp);
|
||||||
|
|
|
@ -229,7 +229,6 @@ static int vu_gpio_connect(DeviceState *dev, Error **errp)
|
||||||
if (gpio->connected) {
|
if (gpio->connected) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
gpio->connected = true;
|
|
||||||
|
|
||||||
vhost_dev_set_config_notifier(vhost_dev, &gpio_ops);
|
vhost_dev_set_config_notifier(vhost_dev, &gpio_ops);
|
||||||
gpio->vhost_user.supports_config = true;
|
gpio->vhost_user.supports_config = true;
|
||||||
|
@ -243,6 +242,8 @@ static int vu_gpio_connect(DeviceState *dev, Error **errp)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gpio->connected = true;
|
||||||
|
|
||||||
/* restore vhost state */
|
/* restore vhost state */
|
||||||
if (virtio_device_started(vdev, vdev->status)) {
|
if (virtio_device_started(vdev, vdev->status)) {
|
||||||
vu_gpio_start(vdev);
|
vu_gpio_start(vdev);
|
||||||
|
|
Loading…
Reference in New Issue