[libvirt] [PATCH V2] implement managedsave in libvirt xen legacy driver
Jim Fehlig
jfehlig at suse.com
Tue Dec 4 17:07:26 UTC 2012
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 at 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);
More information about the libvir-list
mailing list