forked from pool/libvirt
111 lines
4.2 KiB
Diff
111 lines
4.2 KiB
Diff
>From f087f0656f882be305783e24d55921b57fbbcb97 Mon Sep 17 00:00:00 2001
|
|
From: Daniel P. Berrange <berrange@redhat.com>
|
|
Date: Mon, 14 Jun 2010 16:08:55 +0100
|
|
Subject: [PATCH 09/10] 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.h | 2 ++
|
|
src/conf/domain_conf.c | 21 ++++++++++++++++++---
|
|
src/qemu/qemu_driver.c | 8 ++++++++
|
|
3 files changed, 28 insertions(+), 3 deletions(-)
|
|
|
|
Index: libvirt-0.8.1/src/conf/capabilities.h
|
|
===================================================================
|
|
--- libvirt-0.8.1.orig/src/conf/capabilities.h
|
|
+++ libvirt-0.8.1/src/conf/capabilities.h
|
|
@@ -120,6 +120,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 *);
|
|
Index: libvirt-0.8.1/src/conf/domain_conf.c
|
|
===================================================================
|
|
--- libvirt-0.8.1.orig/src/conf/domain_conf.c
|
|
+++ libvirt-0.8.1/src/conf/domain_conf.c
|
|
@@ -1366,7 +1366,8 @@ virDomainDiskDefAssignAddress(virDomainD
|
|
* @param node XML nodeset to parse for disk definition
|
|
*/
|
|
static virDomainDiskDefPtr
|
|
-virDomainDiskDefParseXML(xmlNodePtr node,
|
|
+virDomainDiskDefParseXML(virCapsPtr caps,
|
|
+ xmlNodePtr node,
|
|
int flags) {
|
|
virDomainDiskDefPtr def;
|
|
xmlNodePtr cur;
|
|
@@ -1595,6 +1596,16 @@ virDomainDiskDefParseXML(xmlNodePtr node
|
|
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(def) < 0)
|
|
goto error;
|
|
@@ -1615,6 +1626,9 @@ cleanup:
|
|
|
|
return def;
|
|
|
|
+no_memory:
|
|
+ virReportOOMError();
|
|
+
|
|
error:
|
|
virDomainDiskDefFree(def);
|
|
def = NULL;
|
|
@@ -3521,7 +3535,7 @@ virDomainDeviceDefPtr virDomainDeviceDef
|
|
|
|
if (xmlStrEqual(node->name, BAD_CAST "disk")) {
|
|
dev->type = VIR_DOMAIN_DEVICE_DISK;
|
|
- if (!(dev->data.disk = virDomainDiskDefParseXML(node, flags)))
|
|
+ if (!(dev->data.disk = virDomainDiskDefParseXML(caps, node, flags)))
|
|
goto error;
|
|
} else if (xmlStrEqual(node->name, BAD_CAST "filesystem")) {
|
|
dev->type = VIR_DOMAIN_DEVICE_FS;
|
|
@@ -4028,7 +4042,8 @@ static virDomainDefPtr virDomainDefParse
|
|
if (n && VIR_ALLOC_N(def->disks, n) < 0)
|
|
goto no_memory;
|
|
for (i = 0 ; i < n ; i++) {
|
|
- virDomainDiskDefPtr disk = virDomainDiskDefParseXML(nodes[i],
|
|
+ virDomainDiskDefPtr disk = virDomainDiskDefParseXML(caps,
|
|
+ nodes[i],
|
|
flags);
|
|
if (!disk)
|
|
goto error;
|
|
Index: libvirt-0.8.1/src/qemu/qemu_driver.c
|
|
===================================================================
|
|
--- libvirt-0.8.1.orig/src/qemu/qemu_driver.c
|
|
+++ libvirt-0.8.1/src/qemu/qemu_driver.c
|
|
@@ -1324,6 +1324,14 @@ qemuCreateCapabilities(virCapsPtr oldcap
|
|
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;
|