Daniel P. Berrange wrote:
From: "Daniel P. Berrange" <berrange(a)redhat.com>
Make xenUnifiedDomainGetOSType directly call either the
xenHypervisorDomainGetOSType or xenDaemonDomainGetOSType
method depending on whether the domain is active or not.
Useful to add a note about removing the unused code in the xenstore
driver, as you did in the other patches.
Signed-off-by: Daniel P. Berrange <berrange(a)redhat.com>
---
src/xen/xen_driver.c | 19 ++++++-----
src/xen/xen_driver.h | 1 -
src/xen/xen_hypervisor.c | 5 +--
src/xen/xend_internal.c | 7 +---
src/xen/xend_internal.h | 2 ++
src/xen/xs_internal.c | 85 ------------------------------------------------
6 files changed, 15 insertions(+), 104 deletions(-)
ACK.
Regards,
Jim
diff --git a/src/xen/xen_driver.c b/src/xen/xen_driver.c
index 7827d70..8ee3c4c 100644
--- a/src/xen/xen_driver.c
+++ b/src/xen/xen_driver.c
@@ -782,18 +782,21 @@ static char *
xenUnifiedDomainGetOSType(virDomainPtr dom)
{
xenUnifiedPrivatePtr priv = dom->conn->privateData;
- int i;
- char *ret;
- for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i)
- if (priv->opened[i] && drivers[i]->xenDomainGetOSType) {
- ret = drivers[i]->xenDomainGetOSType(dom);
- if (ret) return ret;
+ if (dom->id < 0) {
+ if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("Unable to query OS type for inactive domain"));
+ return NULL;
+ } else {
+ return xenDaemonDomainGetOSType(dom);
}
-
- return NULL;
+ } else {
+ return xenHypervisorDomainGetOSType(dom);
+ }
}
+
static unsigned long long
xenUnifiedDomainGetMaxMemory(virDomainPtr dom)
{
diff --git a/src/xen/xen_driver.h b/src/xen/xen_driver.h
index aff68f2..3ac2912 100644
--- a/src/xen/xen_driver.h
+++ b/src/xen/xen_driver.h
@@ -94,7 +94,6 @@ extern int xenRegister (void);
*/
struct xenUnifiedDriver {
virDrvConnectGetHostname xenGetHostname;
- virDrvDomainGetOSType xenDomainGetOSType;
virDrvDomainGetMaxMemory xenDomainGetMaxMemory;
virDrvDomainSetMaxMemory xenDomainSetMaxMemory;
virDrvDomainSetMemory xenDomainSetMemory;
diff --git a/src/xen/xen_hypervisor.c b/src/xen/xen_hypervisor.c
index 244bdee..8636d52 100644
--- a/src/xen/xen_hypervisor.c
+++ b/src/xen/xen_hypervisor.c
@@ -873,7 +873,6 @@ typedef struct xen_op_v2_dom xen_op_v2_dom;
static unsigned long long xenHypervisorGetMaxMemory(virDomainPtr domain);
struct xenUnifiedDriver xenHypervisorDriver = {
- .xenDomainGetOSType = xenHypervisorDomainGetOSType,
.xenDomainGetMaxMemory = xenHypervisorGetMaxMemory,
.xenDomainSetMaxMemory = xenHypervisorSetMaxMemory,
.xenDomainGetInfo = xenHypervisorGetDomainInfo,
@@ -2613,9 +2612,7 @@ xenHypervisorDomainGetOSType(virDomainPtr dom)
/* HV's earlier than 3.1.0 don't include the HVM flags in guests status*/
if (hv_versions.hypervisor < 2 ||
hv_versions.dom_interface < 4) {
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
- _("unsupported in dom interface < 4"));
- return NULL;
+ return xenDaemonDomainGetOSType(dom);
}
XEN_GETDOMAININFO_CLEAR(dominfo);
diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c
index c759636..75c1514 100644
--- a/src/xen/xend_internal.c
+++ b/src/xen/xend_internal.c
@@ -1373,15 +1373,11 @@ xenDaemonDomainDestroy(virDomainPtr domain)
* Returns the new string or NULL in case of error, the string must be
* freed by the caller.
*/
-static char *
+char *
xenDaemonDomainGetOSType(virDomainPtr domain)
{
char *type;
struct sexpr *root;
- xenUnifiedPrivatePtr priv = domain->conn->privateData;
-
- if (domain->id < 0 && priv->xendConfigVersion <
XEND_CONFIG_VERSION_3_0_4)
- return NULL;
/* can we ask for a subset ? worth it ? */
root = sexpr_get(domain->conn, "/xend/domain/%s?detail=1",
domain->name);
@@ -3441,7 +3437,6 @@ xenDaemonDomainBlockPeek(virDomainPtr domain,
}
struct xenUnifiedDriver xenDaemonDriver = {
- .xenDomainGetOSType = xenDaemonDomainGetOSType,
.xenDomainGetMaxMemory = xenDaemonDomainGetMaxMemory,
.xenDomainSetMaxMemory = xenDaemonDomainSetMaxMemory,
.xenDomainSetMemory = xenDaemonDomainSetMemory,
diff --git a/src/xen/xend_internal.h b/src/xen/xend_internal.h
index d393ec8..9681068 100644
--- a/src/xen/xend_internal.h
+++ b/src/xen/xend_internal.h
@@ -108,6 +108,8 @@ char *xenDaemonDomainGetXMLDesc(virDomainPtr domain, unsigned int
flags,
unsigned long long xenDaemonDomainGetMaxMemory(virDomainPtr domain);
char **xenDaemonListDomainsOld(virConnectPtr xend);
+char *xenDaemonDomainGetOSType(virDomainPtr domain);
+
virDomainPtr xenDaemonDomainDefineXML(virConnectPtr xend, const char *sexpr);
int xenDaemonDomainCreate(virDomainPtr domain);
int xenDaemonDomainUndefine(virDomainPtr domain);
diff --git a/src/xen/xs_internal.c b/src/xen/xs_internal.c
index a7a8d15..40d0be2 100644
--- a/src/xen/xs_internal.c
+++ b/src/xen/xs_internal.c
@@ -53,12 +53,10 @@
#define VIR_FROM_THIS VIR_FROM_XEN
-static char *xenStoreDomainGetOSType(virDomainPtr domain);
static void xenStoreWatchEvent(int watch, int fd, int events, void *data);
static void xenStoreWatchListFree(xenStoreWatchListPtr list);
struct xenUnifiedDriver xenStoreDriver = {
- .xenDomainGetOSType = xenStoreDomainGetOSType,
.xenDomainGetMaxMemory = xenStoreDomainGetMaxMemory,
.xenDomainSetMemory = xenStoreDomainSetMemory,
.xenDomainGetInfo = xenStoreGetDomainInfo,
@@ -142,63 +140,6 @@ virDomainDoStoreWrite(virDomainPtr domain, const char *path, const
char *value)
return ret;
}
-/**
- * virDomainGetVM:
- * @domain: a domain object
- *
- * Internal API extracting a xenstore vm path.
- *
- * Returns the new string or NULL in case of error
- */
-static char *
-virDomainGetVM(virDomainPtr domain)
-{
- char *vm;
- char query[200];
- unsigned int len;
- xenUnifiedPrivatePtr priv = domain->conn->privateData;
-
- if (priv->xshandle == NULL)
- return NULL;
-
- snprintf(query, 199, "/local/domain/%d/vm", virDomainGetID(domain));
- query[199] = 0;
-
- vm = xs_read(priv->xshandle, 0, &query[0], &len);
-
- return vm;
-}
-
-/**
- * virDomainGetVMInfo:
- * @domain: a domain object
- * @vm: the xenstore vm path
- * @name: the value's path
- *
- * Internal API extracting one information the device used
- * by the domain from xensttore
- *
- * Returns the new string or NULL in case of error
- */
-static char *
-virDomainGetVMInfo(virDomainPtr domain, const char *vm, const char *name)
-{
- char s[256];
- char *ret = NULL;
- unsigned int len = 0;
- xenUnifiedPrivatePtr priv = domain->conn->privateData;
-
- if (priv->xshandle == NULL)
- return NULL;
-
- snprintf(s, 255, "%s/%s", vm, name);
- s[255] = 0;
-
- ret = xs_read(priv->xshandle, 0, &s[0], &len);
-
- return ret;
-}
-
/************************************************************************
* *
@@ -579,32 +520,6 @@ xenStoreListDomains(virConnectPtr conn, int *ids, int maxids)
}
-/*
- * xenStoreDomainGetOSType:
- * @domain: a domain object
- *
- * Get the type of domain operation system.
- *
- * Returns the new string or NULL in case of error, the string must be
- * freed by the caller.
- */
-static char *
-xenStoreDomainGetOSType(virDomainPtr domain)
-{
- char *vm, *str = NULL;
-
- vm = virDomainGetVM(domain);
- if (vm) {
- xenUnifiedPrivatePtr priv = domain->conn->privateData;
- xenUnifiedLock(priv);
- str = virDomainGetVMInfo(domain, vm, "image/ostype");
- xenUnifiedUnlock(priv);
- VIR_FREE(vm);
- }
-
- return str;
-}
-
/**
* xenStoreDomainGetVNCPort:
* @conn: the hypervisor connection