Bamvor Jian Zhang wrote:
Implement the domainManagedSave, domainHasManagedSaveImage, and
domainManagedSaveRemove functions in the libvirt legacy xen driver.
domainHasManagedSaveImage check the managedsave image from filesystem
everytime. This is different from qemu and libxl driver. In qemu or
libxl driver, there is a hasManagesSave flags in virDomainObjPtr which
is not used in xen legacy driver. This flag could not add into xen
driver ptr either, because the driver ptr will be release at the end of
every libvirt api calls. Meanwhile, AFAIK, xen store all the flags in
xen not in libvirt xen driver. There is no need to add this flags in xen.
Signed-off-by: Bamvor Jian Zhang <bjzhang(a)suse.com>
[...]
@@ -1505,15 +1591,32 @@ xenUnifiedDomainCreateWithFlags(virDomainPtr
dom, unsigned int flags)
{
GET_PRIVATE(dom->conn);
int i;
+ int ret = -1;
+ char *name = NULL;
virCheckFlags(0, -1);
+ name = xenUnifiedDomainManagedSavePath(priv, dom);
+ if (!name)
+ goto cleanup;
+
+ if (virFileExists(name)) {
+ if (priv->opened[XEN_UNIFIED_XEND_OFFSET]) {
+ ret = xenDaemonDomainRestore(dom->conn, name);
+ if (ret == 0)
+ unlink(name);
+ }
+ goto cleanup;
+ }
+
for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i)
if (priv->opened[i] && drivers[i]->xenDomainCreate &&
drivers[i]->xenDomainCreate(dom) == 0)
return 0;
Still a memory leak here. I've squashed in the below patch and pushed
the result. Thanks Bamvor.
Regards,
Jim
diff --git a/src/xen/xen_driver.c b/src/xen/xen_driver.c
index 8b44f17..3786176 100644
--- a/src/xen/xen_driver.c
+++ b/src/xen/xen_driver.c
@@ -1611,10 +1611,13 @@ xenUnifiedDomainCreateWithFlags(virDomainPtr
dom, unsigned int flags)
goto cleanup;
}
- for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i)
+ for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i) {
if (priv->opened[i] && drivers[i]->xenDomainCreate &&
- drivers[i]->xenDomainCreate(dom) == 0)
- return 0;
+ drivers[i]->xenDomainCreate(dom) == 0) {
+ ret = 0;
+ goto cleanup;
+ }
+ }
cleanup:
VIR_FREE(name);