From 03ca42046a54c5cfadb2e69194896abf06f6a10f Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Mon, 14 Jun 2010 16:08:55 +0100 Subject: [PATCH] Add ability to set a default driver name/type when parsing disks Record a default driver name/type in capabilities struct. Use this when parsing disks if value is not set in XML config. * src/conf/capabilities.h: Record default driver name/type for disks * src/conf/domain_conf.c: Fallback to default driver name/type when parsing disks * src/qemu/qemu_driver.c: Set default driver name/type to raw --- src/conf/capabilities.c | 3 +++ src/conf/capabilities.h | 2 ++ src/conf/domain_conf.c | 16 +++++++++++++++- src/qemu/qemu_driver.c | 8 ++++++++ 4 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/conf/capabilities.c b/src/conf/capabilities.c index 4478d85f40..36f97b9b3f 100644 --- a/src/conf/capabilities.c +++ b/src/conf/capabilities.c @@ -175,6 +175,9 @@ virCapabilitiesFree(virCapsPtr caps) { VIR_FREE(caps->host.secModel.doi); virCPUDefFree(caps->host.cpu); + VIR_FREE(caps->defaultDiskDriverName); + VIR_FREE(caps->defaultDiskDriverType); + VIR_FREE(caps); } diff --git a/src/conf/capabilities.h b/src/conf/capabilities.h index 9290c826da..f676eb8014 100644 --- a/src/conf/capabilities.h +++ b/src/conf/capabilities.h @@ -123,6 +123,8 @@ struct _virCaps { virCapsGuestPtr *guests; unsigned char macPrefix[VIR_MAC_PREFIX_BUFLEN]; unsigned int emulatorRequired : 1; + const char *defaultDiskDriverName; + const char *defaultDiskDriverType; void *(*privateDataAllocFunc)(void); void (*privateDataFreeFunc)(void *); int (*privateDataXMLFormat)(virBufferPtr, void *); diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index b20ca975e5..f3b8cfa3a5 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -1639,6 +1639,16 @@ virDomainDiskDefParseXML(virCapsPtr caps, def->serial = serial; serial = NULL; + if (!def->driverType && + caps->defaultDiskDriverType && + !(def->driverType = strdup(caps->defaultDiskDriverType))) + goto no_memory; + + if (!def->driverName && + caps->defaultDiskDriverName && + !(def->driverName = strdup(caps->defaultDiskDriverName))) + goto no_memory; + if (def->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE && virDomainDiskDefAssignAddress(caps, def) < 0) goto error; @@ -1659,6 +1669,9 @@ cleanup: return def; +no_memory: + virReportOOMError(); + error: virDomainDiskDefFree(def); def = NULL; @@ -4275,7 +4288,8 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr caps, if (n && VIR_ALLOC_N(def->disks, n) < 0) goto no_memory; for (i = 0 ; i < n ; i++) { - virDomainDiskDefPtr disk = virDomainDiskDefParseXML(caps, nodes[i], + virDomainDiskDefPtr disk = virDomainDiskDefParseXML(caps, + nodes[i], flags); if (!disk) goto error; diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index ca87ca80a4..2eb254e7d1 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -1361,6 +1361,14 @@ qemuCreateCapabilities(virCapsPtr oldcaps, return NULL; } + if (driver->allowDiskFormatProbing) { + caps->defaultDiskDriverName = NULL; + caps->defaultDiskDriverType = NULL; + } else { + caps->defaultDiskDriverName = "qemu"; + caps->defaultDiskDriverType = "raw"; + } + /* Domain XML parser hooks */ caps->privateDataAllocFunc = qemuDomainObjPrivateAlloc; caps->privateDataFreeFunc = qemuDomainObjPrivateFree; -- 2.39.5