aboutsummaryrefslogtreecommitdiff
path: root/hw/scsi
diff options
context:
space:
mode:
authorXie Yongji <xieyongji@baidu.com>2019-07-17 08:46:05 +0800
committerPaolo Bonzini <pbonzini@redhat.com>2019-07-19 19:04:49 +0200
commit934443c37befc9e268f5c661cb9552a2ee572e19 (patch)
tree6639480b223301b2eee6a5d4cbad041ea0f2b3bd /hw/scsi
parent12e1dc49395674960efec967ca4161428c08307a (diff)
vhost-scsi: Call virtio_scsi_common_unrealize() when device realize failed
This avoids memory leak when device hotplug is failed. Signed-off-by: Xie Yongji <xieyongji@baidu.com> Message-Id: <20190717004606.12444-1-xieyongji@baidu.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'hw/scsi')
-rw-r--r--hw/scsi/vhost-scsi.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/hw/scsi/vhost-scsi.c b/hw/scsi/vhost-scsi.c
index 76bb875ca6..343ca8be7a 100644
--- a/hw/scsi/vhost-scsi.c
+++ b/hw/scsi/vhost-scsi.c
@@ -210,7 +210,7 @@ static void vhost_scsi_realize(DeviceState *dev, Error **errp)
if (err) {
error_propagate(errp, err);
error_free(vsc->migration_blocker);
- goto close_fd;
+ goto free_virtio;
}
}
@@ -240,6 +240,8 @@ static void vhost_scsi_realize(DeviceState *dev, Error **errp)
migrate_del_blocker(vsc->migration_blocker);
}
g_free(vsc->dev.vqs);
+ free_virtio:
+ virtio_scsi_common_unrealize(dev);
close_fd:
close(vhostfd);
return;