From: Marc-André Lureau Date: Tue, 26 Jul 2016 21:14:58 +0000 (+0400) Subject: vhost: don't assume opaque is a fd, use backend cleanup X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=7cb8a9b9f235098096c493cc1a1487cd8dbd6820;p=qemu.git 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 Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin --- 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);