diff --git a/module/bdev/virtio/bdev_virtio_scsi.c b/module/bdev/virtio/bdev_virtio_scsi.c index 520b8a17d..791359538 100644 --- a/module/bdev/virtio/bdev_virtio_scsi.c +++ b/module/bdev/virtio/bdev_virtio_scsi.c @@ -344,19 +344,21 @@ virtio_pci_scsi_dev_create(const char *name, struct virtio_pci_ctx *pci_ctx) &num_queues, sizeof(num_queues)); if (rc) { SPDK_ERRLOG("%s: config read failed: %s\n", vdev->name, spdk_strerror(-rc)); - virtio_dev_destruct(vdev); - free(svdev); - return NULL; + goto fail; } rc = virtio_scsi_dev_init(svdev, num_queues); if (rc != 0) { - virtio_dev_destruct(vdev); - free(svdev); - return NULL; + goto fail; } return svdev; + +fail: + vdev->ctx = NULL; + virtio_dev_destruct(vdev); + free(svdev); + return NULL; } static struct virtio_scsi_dev * @@ -1967,6 +1969,7 @@ bdev_virtio_pci_scsi_dev_create_cb(struct virtio_pci_ctx *pci_ctx, void *ctx) rc = virtio_scsi_dev_scan(svdev, create_ctx->cb_fn, create_ctx->cb_arg); if (rc) { + svdev->vdev.ctx = NULL; virtio_scsi_dev_remove(svdev, NULL, NULL); }