[libvirt] [PATCH 0/2] libxl: Add support for qdisk disk backend

This small patch series adds support for qdisk backend type in libxl. A qdisk uses the block drivers in qemu to serve as a block backend, verses blktap or blkbk. While testing the second patch, I noticed a slightly misleading error was emitted when the tap backend didn't support the requested disk format. Fix this with the first patch, including adding format checks in the other supported disk backends. Jim Fehlig (2): libxl: Fix disk format error message libxl: support qdisk backend src/libxl/libxl_conf.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) -- 1.8.0.1

Specifying an unsupported disk format with the tap driver resulted in a less than helpful error message error: Failed to start domain test-hvm error: internal error libxenlight does not support disk driver qed Change the message to state that the qed format is not supported by the tap driver, e.g. error: Failed to start domain test-hvm error: internal error libxenlight does not support disk format qed with disk driver tap While at it, check for unsupported formats in the other driver backends. --- src/libxl/libxl_conf.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c index 7e0753a..e646ec5 100644 --- a/src/libxl/libxl_conf.c +++ b/src/libxl/libxl_conf.c @@ -495,14 +495,34 @@ libxlMakeDisk(virDomainDiskDefPtr l_disk, libxl_device_disk *x_disk) break; default: virReportError(VIR_ERR_INTERNAL_ERROR, - _("libxenlight does not support disk driver %s"), - virStorageFileFormatTypeToString(l_disk->format)); + _("libxenlight does not support disk format %s " + "with disk driver %s"), + virStorageFileFormatTypeToString(l_disk->format), + l_disk->driverName); return -1; } } else if (STREQ(l_disk->driverName, "file")) { + if (l_disk->format != VIR_STORAGE_FILE_NONE || + l_disk->format != VIR_STORAGE_FILE_RAW) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("libxenlight does not support disk format %s " + "with disk driver %s"), + virStorageFileFormatTypeToString(l_disk->format), + l_disk->driverName); + return -1; + } x_disk->format = LIBXL_DISK_FORMAT_RAW; x_disk->backend = LIBXL_DISK_BACKEND_TAP; } else if (STREQ(l_disk->driverName, "phy")) { + if (l_disk->format != VIR_STORAGE_FILE_NONE || + l_disk->format != VIR_STORAGE_FILE_RAW) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("libxenlight does not support disk format %s " + "with disk driver %s"), + virStorageFileFormatTypeToString(l_disk->format), + l_disk->driverName); + return -1; + } x_disk->format = LIBXL_DISK_FORMAT_RAW; x_disk->backend = LIBXL_DISK_BACKEND_PHY; } else { -- 1.8.0.1

libxl supports the LIBXL_DISK_BACKEND_QDISK disk backend, where qemu is used to provide the disk backend. This patch simply maps the existing <driver name='qemu'/> to LIBXL_DISK_BACKEND_QDISK. --- src/libxl/libxl_conf.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c index e646ec5..1ddb1f5 100644 --- a/src/libxl/libxl_conf.c +++ b/src/libxl/libxl_conf.c @@ -501,6 +501,31 @@ libxlMakeDisk(virDomainDiskDefPtr l_disk, libxl_device_disk *x_disk) l_disk->driverName); return -1; } + } else if (STREQ(l_disk->driverName, "qemu")) { + x_disk->backend = LIBXL_DISK_BACKEND_QDISK; + switch (l_disk->format) { + case VIR_STORAGE_FILE_QCOW: + x_disk->format = LIBXL_DISK_FORMAT_QCOW; + break; + case VIR_STORAGE_FILE_QCOW2: + x_disk->format = LIBXL_DISK_FORMAT_QCOW2; + break; + case VIR_STORAGE_FILE_VHD: + x_disk->format = LIBXL_DISK_FORMAT_VHD; + break; + case VIR_STORAGE_FILE_NONE: + /* No subtype specified, default to raw */ + case VIR_STORAGE_FILE_RAW: + x_disk->format = LIBXL_DISK_FORMAT_RAW; + break; + default: + virReportError(VIR_ERR_INTERNAL_ERROR, + _("libxenlight does not support disk format %s " + "with disk driver %s"), + virStorageFileFormatTypeToString(l_disk->format), + l_disk->driverName); + return -1; + } } else if (STREQ(l_disk->driverName, "file")) { if (l_disk->format != VIR_STORAGE_FILE_NONE || l_disk->format != VIR_STORAGE_FILE_RAW) { -- 1.8.0.1
participants (1)
-
Jim Fehlig