[libvirt] [PATCH] libxl: fix domxml-to-native wrong output for qcow2 format
Bamvor Jian Zhang
bjzhang at suse.com
Fri Jun 13 06:01:34 UTC 2014
>>>Jim Fehlig wrote:
> Bamvor Jian Zhang<bjzhang at suse.com> wrote:
>> e.g. for these following disk configuration in libvirt.
>> <disk type='file' device='disk'>
>
> For Xen, using <driver name='qemu' .../> (which means qdisk) is only
> supported by the libxl driver. The old xm/xend stack does not support qdisk.
>
>> <driver name='qemu' type='qcow2'/>
>> <source file='/var/lib/xen/images/001/disk0.qcow2'/>
>> <target dev='hdc'/>
>>
>> without this patch, it will be
>> "qemu:/var/lib/xen/images/001/disk0.qcow2,hdc,w"
>
> Yeah, that won't work with xend or libxl :) .
>
>> but it should be(if with this patch)
>> "qcow2:/var/lib/xen/images/001/disk0.qcow2,hdc,w"
>>
>> Signed-off-by: Bamvor Jian Zhang <bjzhang at suse.com>
>> ---
>> src/xenxs/xen_xm.c | 5 ++++-
>> 1 file changed, 4 insertions(+), 1 deletion(-)
>>
>> diff --git a/src/xenxs/xen_xm.c b/src/xenxs/xen_xm.c
>> index b2db97d..29835b4 100644
>> --- a/src/xenxs/xen_xm.c
>> +++ b/src/xenxs/xen_xm.c
>> @@ -1209,7 +1209,10 @@ xenFormatXMDisk(virConfValuePtr list,
>> type = "aio";
>> else
>> type = virStorageFileFormatTypeToString(format);
>> - virBufferAsprintf(&buf, "%s:", driver);
>> + if (!STREQ(type, "qcow2"))
>> + virBufferAsprintf(&buf, "%s:", driver);
>> + else
>> + virBufferAsprintf(&buf, "%s:", type);
>
> But this only handles the specific case of <driver name='qemu'
> type='qcow2'/>.
> With <driver name='qemu' type='raw'/>, I get
>
> "qemu:/path/to/disk,hdc,w"
>
> Unfortunately, this is a case where we are trying to use the xm config
> parser to parse something that is xl-specific. With <driver
> name='qemu'.../>,
> the corresponding xl disk config would look something like
>
> disk = ['backendtype=qdisk,/var/lib/xen/images/001/disk0.qcow2,hdc,w']
>
> With the type also specified, e.g. <driver name='qemu' type='qcow2'/>, the
> xl
> disk config would be
>
> disk =
> ['backendtype=qdisk,format=qcow2,/var/lib/xen/images/001/disk0.qcow2,hdc,w']
>
> As I see it, the options are
>
> 1. start working on a xen-xl parser
> 2. map 'qemu' to 'tap'
>
> We'll eventually need 1 anyhow. I haven't looked to see how much work that
> would be. Certainly a lot of the xm parsing code could be used since xm
> config is a subset of xl config.
understand. the main difference between xl and xm format is disk and network.
and it worth to do it.
>
> Option 2 is really a no-op in the libxl stack, where qdisk is used in place
> of tap anyhow. One could argue that mapping qemu to tap isn't too insane in
> the xm/xend stack either, since much of the blktap userspace code was
> originally based on qemu.
>
> The below patch works for me. Can you give it a try? I'd like to hear wha
> others think about taking the easy way out with option 2.
the following patch works for me.
regards
bamvor
>
> Regards,
> Jim
>
>
> From 92c476cbe47009c43ebb4a3076a17347c8eea238 Mon Sep 17 00:00:00 2001
> From: Jim Fehlig <jfehlig at suse.com>
> Date: Thu, 12 Jun 2014 15:28:48 -0600
> Subject: [PATCH] libxl: fix domxml-to-native with qemu disk driver
>
> Disk config containing <driver name='qemu'.../> is converted to
> the native config containg "qemu:/path/to/disk", which is not
> understood by xm or xl.
>
> This patch maps 'qemu' to 'tap'. In xl, tap is mapped to the qemu
> backend (aka qdisk), making this change essentially a no-op. In
> the xm stack, one could argue that mapping qemu to tap isn't too
> insane, since much of the blktap userspace code was originally
> based on qemu.
>
> While at it, noticed that 'driver' wasn't being honored in
> xenFormatXMDisk, so change the logic a bit to honor a
> user-specified driver.
>
> Signed-off-by: Jim Fehlig <jfehlig at suse.com>
> ---
> src/xenxs/xen_xm.c | 29 ++++++++++++++++++++---------
> 1 file changed, 20 insertions(+), 9 deletions(-)
>
> diff --git a/src/xenxs/xen_xm.c b/src/xenxs/xen_xm.c
> index b2db97d..ebd525b 100644
> --- a/src/xenxs/xen_xm.c
> +++ b/src/xenxs/xen_xm.c
> @@ -1201,17 +1201,28 @@ xenFormatXMDisk(virConfValuePtr list,
> int format = virDomainDiskGetFormat(disk);
> const char *driver = virDomainDiskGetDriver(disk);
>
> - if (src) {
> - if (format) {
> - const char *type;
> + /*
> + * In pre-libxl Xen, 'tap' provided the qemu driver functionality.
> + * In libxl Xen, qemu (aka qdisk) is in fact used. For backwards
> + * compatibility, tap == qdisk in libxl Xen, so it is safe to use
> + * 'tap' in libxl tool.
> + */
> + if (STREQ(driver, "qemu"))
> + driver = "tap";
>
> - if (format == VIR_STORAGE_FILE_RAW)
> - type = "aio";
> - else
> - type = virStorageFileFormatTypeToString(format);
> + if (src) {
> + if (driver) {
> virBufferAsprintf(&buf, "%s:", driver);
> - if (STREQ(driver, "tap"))
> - virBufferAsprintf(&buf, "%s:", type);
> + if (format) {
> + const char *type;
> +
> + if (format == VIR_STORAGE_FILE_RAW)
> + type = "aio";
> + else
> + type = virStorageFileFormatTypeToString(format);
> + if (STREQ(driver, "tap"))
> + virBufferAsprintf(&buf, "%s:", type);
> + }
> } else {
> switch (virDomainDiskGetType(disk)) {
> case VIR_STORAGE_TYPE_FILE:
> -- 1.8.4.5
More information about the libvir-list
mailing list