diff options
| author | Marc-André Lureau | 2016-07-26 23:14:58 +0200 |
|---|---|---|
| committer | Michael S. Tsirkin | 2016-07-28 23:33:46 +0200 |
| commit | 7cb8a9b9f235098096c493cc1a1487cd8dbd6820 (patch) | |
| tree | b4603afd2aca3835bd7f4b021b6f75ad470e2506 /hw/virtio | |
| parent | vhost-user: disconnect on HUP (diff) | |
| download | qemu-7cb8a9b9f235098096c493cc1a1487cd8dbd6820.tar.gz qemu-7cb8a9b9f235098096c493cc1a1487cd8dbd6820.tar.xz qemu-7cb8a9b9f235098096c493cc1a1487cd8dbd6820.zip | |
vhost: don't assume opaque is a fd, use backend cleanup
vhost-dev opaque isn't necessarily an fd, it can be a chardev when using
vhost-user. Goto fail, so vhost_backend_cleanup() is called to handle
backend cleanup appropriately.
vhost_set_backend_type() should never fail, use an assert().
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Diffstat (limited to 'hw/virtio')
| -rw-r--r-- | hw/virtio/vhost.c | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index ec3abda9d5..429499aefa 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -1019,21 +1019,19 @@ int vhost_dev_init(struct vhost_dev *hdev, void *opaque, hdev->migration_blocker = NULL; - if (vhost_set_backend_type(hdev, backend_type) < 0) { - close((uintptr_t)opaque); - return -1; - } + r = vhost_set_backend_type(hdev, backend_type); + assert(r >= 0); - if (hdev->vhost_ops->vhost_backend_init(hdev, opaque) < 0) { - close((uintptr_t)opaque); - return -errno; + r = hdev->vhost_ops->vhost_backend_init(hdev, opaque); + if (r < 0) { + goto fail; } if (used_memslots > hdev->vhost_ops->vhost_backend_memslots_limit(hdev)) { fprintf(stderr, "vhost backend memory slots limit is less" " than current number of present memory slots\n"); - close((uintptr_t)opaque); - return -1; + r = -1; + goto fail; } QLIST_INSERT_HEAD(&vhost_devices, hdev, entry); |
