Simplify the Xen domain start driver method

Directly call either the XenD or XM driver when starting
a persistent domain

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
This commit is contained in:
Daniel P. Berrange 2013-04-30 17:33:48 +01:00
parent f53ffba6aa
commit 2fc0660848
4 changed files with 13 additions and 31 deletions

View File

@ -1344,7 +1344,6 @@ static int
xenUnifiedDomainCreateWithFlags(virDomainPtr dom, unsigned int flags) xenUnifiedDomainCreateWithFlags(virDomainPtr dom, unsigned int flags)
{ {
xenUnifiedPrivatePtr priv = dom->conn->privateData; xenUnifiedPrivatePtr priv = dom->conn->privateData;
int i;
int ret = -1; int ret = -1;
char *name = NULL; char *name = NULL;
@ -1355,21 +1354,16 @@ xenUnifiedDomainCreateWithFlags(virDomainPtr dom, unsigned int flags)
goto cleanup; goto cleanup;
if (virFileExists(name)) { if (virFileExists(name)) {
if (priv->opened[XEN_UNIFIED_XEND_OFFSET]) { ret = xenDaemonDomainRestore(dom->conn, name);
ret = xenDaemonDomainRestore(dom->conn, name); if (ret == 0)
if (ret == 0) unlink(name);
unlink(name);
}
goto cleanup; goto cleanup;
} }
for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i) { if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4)
if (priv->opened[i] && drivers[i]->xenDomainCreate && ret = xenXMDomainCreate(dom);
drivers[i]->xenDomainCreate(dom) == 0) { else
ret = 0; ret = xenDaemonDomainCreate(dom);
goto cleanup;
}
}
cleanup: cleanup:
VIR_FREE(name); VIR_FREE(name);

View File

@ -93,7 +93,6 @@ extern int xenRegister (void);
* structure with direct calls in xen_unified.c. * structure with direct calls in xen_unified.c.
*/ */
struct xenUnifiedDriver { struct xenUnifiedDriver {
virDrvDomainCreate xenDomainCreate;
virDrvDomainDefineXML xenDomainDefineXML; virDrvDomainDefineXML xenDomainDefineXML;
virDrvDomainUndefine xenDomainUndefine; virDrvDomainUndefine xenDomainUndefine;
virDrvDomainAttachDeviceFlags xenDomainAttachDeviceFlags; virDrvDomainAttachDeviceFlags xenDomainAttachDeviceFlags;

View File

@ -2898,23 +2898,17 @@ xenDaemonDomainDefineXML(virConnectPtr conn, const char *xmlDesc)
int int
xenDaemonDomainCreate(virDomainPtr domain) xenDaemonDomainCreate(virDomainPtr domain)
{ {
xenUnifiedPrivatePtr priv = domain->conn->privateData;
int ret; int ret;
virDomainPtr tmp;
if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4)
return -1;
ret = xend_op(domain->conn, domain->name, "op", "start", NULL); ret = xend_op(domain->conn, domain->name, "op", "start", NULL);
if (ret != -1) { if (ret == 0) {
/* Need to force a refresh of this object's ID */ int id = xenDaemonDomainLookupByName_ids(domain->conn, domain->name,
tmp = virDomainLookupByName(domain->conn, domain->name); domain->uuid);
if (tmp) { if (id > 0)
domain->id = tmp->id; domain->id = id;
virDomainFree(tmp);
}
} }
return ret; return ret;
} }
@ -3376,7 +3370,6 @@ xenDaemonDomainBlockPeek(virDomainPtr domain,
} }
struct xenUnifiedDriver xenDaemonDriver = { struct xenUnifiedDriver xenDaemonDriver = {
.xenDomainCreate = xenDaemonDomainCreate,
.xenDomainDefineXML = xenDaemonDomainDefineXML, .xenDomainDefineXML = xenDaemonDomainDefineXML,
.xenDomainUndefine = xenDaemonDomainUndefine, .xenDomainUndefine = xenDaemonDomainUndefine,
.xenDomainAttachDeviceFlags = xenDaemonAttachDeviceFlags, .xenDomainAttachDeviceFlags = xenDaemonAttachDeviceFlags,

View File

@ -81,7 +81,6 @@ static int xenXMDomainDetachDeviceFlags(virDomainPtr domain, const char *xml,
#define XM_XML_ERROR "Invalid xml" #define XM_XML_ERROR "Invalid xml"
struct xenUnifiedDriver xenXMDriver = { struct xenUnifiedDriver xenXMDriver = {
.xenDomainCreate = xenXMDomainCreate,
.xenDomainDefineXML = xenXMDomainDefineXML, .xenDomainDefineXML = xenXMDomainDefineXML,
.xenDomainUndefine = xenXMDomainUndefine, .xenDomainUndefine = xenXMDomainUndefine,
.xenDomainAttachDeviceFlags = xenXMDomainAttachDeviceFlags, .xenDomainAttachDeviceFlags = xenXMDomainAttachDeviceFlags,
@ -918,9 +917,6 @@ xenXMDomainCreate(virDomainPtr domain)
const char *filename; const char *filename;
xenXMConfCachePtr entry; xenXMConfCachePtr entry;
if (domain->id != -1)
return -1;
xenUnifiedLock(priv); xenUnifiedLock(priv);
if (!(filename = virHashLookup(priv->nameConfigMap, domain->name))) if (!(filename = virHashLookup(priv->nameConfigMap, domain->name)))