From 648b521e0d004ebc6ba1dab39930c43de68f6a08 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Markus=20Gro=C3=9F?= Date: Mon, 30 May 2011 11:53:00 +0200 Subject: [PATCH] Populate domid field of devices for libxenlight This patch fixes the population of the libxenlight data structures. Now the devices should be removed correctly from the xenstore if they are detached. --- src/libxl/libxl_conf.c | 20 +++++++++++++------- src/libxl/libxl_conf.h | 10 ++++++---- src/libxl/libxl_driver.c | 6 +++--- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c index b58678a796..0f6035eda4 100644 --- a/src/libxl/libxl_conf.c +++ b/src/libxl/libxl_conf.c @@ -479,7 +479,8 @@ error: } int -libxlMakeDisk(virDomainDiskDefPtr l_disk, libxl_device_disk *x_disk) +libxlMakeDisk(virDomainDefPtr def, virDomainDiskDefPtr l_disk, + libxl_device_disk *x_disk) { if (l_disk->src && (x_disk->pdev_path = strdup(l_disk->src)) == NULL) { virReportOOMError(); @@ -537,6 +538,8 @@ libxlMakeDisk(virDomainDiskDefPtr l_disk, libxl_device_disk *x_disk) x_disk->readwrite = !l_disk->readonly; x_disk->is_cdrom = l_disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM ? 1 : 0; + x_disk->domid = def->id; + return 0; } @@ -554,7 +557,7 @@ libxlMakeDiskList(virDomainDefPtr def, libxl_domain_config *d_config) } for (i = 0; i < ndisks; i++) { - if (libxlMakeDisk(l_disks[i], &x_disks[i]) < 0) + if (libxlMakeDisk(def, l_disks[i], &x_disks[i]) < 0) goto error; } @@ -571,11 +574,13 @@ error: } int -libxlMakeNic(virDomainNetDefPtr l_nic, libxl_device_nic *x_nic) +libxlMakeNic(virDomainDefPtr def, virDomainNetDefPtr l_nic, + libxl_device_nic *x_nic) { // TODO: Where is mtu stored? //x_nics[i].mtu = 1492; + x_nic->domid = def->id; memcpy(x_nic->mac, l_nic->mac, sizeof(libxl_mac)); if (l_nic->model && !STREQ(l_nic->model, "netfront")) { @@ -625,7 +630,7 @@ libxlMakeNicList(virDomainDefPtr def, libxl_domain_config *d_config) for (i = 0; i < nnics; i++) { x_nics[i].devid = i; - if (libxlMakeNic(l_nics[i], &x_nics[i])) + if (libxlMakeNic(def, l_nics[i], &x_nics[i])) goto error; } @@ -642,8 +647,8 @@ error: } int -libxlMakeVfb(libxlDriverPrivatePtr driver, virDomainGraphicsDefPtr l_vfb, - libxl_device_vfb *x_vfb) +libxlMakeVfb(libxlDriverPrivatePtr driver, virDomainDefPtr def, + virDomainGraphicsDefPtr l_vfb, libxl_device_vfb *x_vfb) { int port; @@ -694,6 +699,7 @@ libxlMakeVfb(libxlDriverPrivatePtr driver, virDomainGraphicsDefPtr l_vfb, } break; } + x_vfb->domid = def->id; return 0; } @@ -724,7 +730,7 @@ libxlMakeVfbList(libxlDriverPrivatePtr driver, libxl_device_vfb_init(&x_vfbs[i], i); libxl_device_vkb_init(&x_vkbs[i], i); - if (libxlMakeVfb(driver, l_vfbs[i], &x_vfbs[i]) < 0) + if (libxlMakeVfb(driver, def, l_vfbs[i], &x_vfbs[i]) < 0) goto error; } diff --git a/src/libxl/libxl_conf.h b/src/libxl/libxl_conf.h index 5707b4efe8..bf5a50d8be 100644 --- a/src/libxl/libxl_conf.h +++ b/src/libxl/libxl_conf.h @@ -90,12 +90,14 @@ virCapsPtr libxlMakeCapabilities(libxl_ctx *ctx); int -libxlMakeDisk(virDomainDiskDefPtr l_dev, libxl_device_disk *x_dev); +libxlMakeDisk(virDomainDefPtr def, virDomainDiskDefPtr l_dev, + libxl_device_disk *x_dev); int -libxlMakeNic(virDomainNetDefPtr l_nic, libxl_device_nic *x_nic); +libxlMakeNic(virDomainDefPtr def, virDomainNetDefPtr l_nic, + libxl_device_nic *x_nic); int -libxlMakeVfb(libxlDriverPrivatePtr driver, virDomainGraphicsDefPtr l_vfb, - libxl_device_vfb *x_vfb); +libxlMakeVfb(libxlDriverPrivatePtr driver, virDomainDefPtr def, + virDomainGraphicsDefPtr l_vfb, libxl_device_vfb *x_vfb); int libxlBuildDomainConfig(libxlDriverPrivatePtr driver, diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c index 312d414232..5463b9004d 100644 --- a/src/libxl/libxl_driver.c +++ b/src/libxl/libxl_driver.c @@ -2252,7 +2252,7 @@ libxlDomainChangeEjectableMedia(libxlDomainObjPrivatePtr priv, return -1; } - if (libxlMakeDisk(disk, &x_disk) < 0) + if (libxlMakeDisk(vm->def, disk, &x_disk) < 0) goto cleanup; if ((ret = libxl_cdrom_insert(&priv->ctx, vm->def->id, &x_disk)) < 0) { @@ -2307,7 +2307,7 @@ libxlDomainAttachDeviceDiskLive(libxlDomainObjPrivatePtr priv, goto cleanup; } - if (libxlMakeDisk(l_disk, &x_disk) < 0) + if (libxlMakeDisk(vm->def, l_disk, &x_disk) < 0) goto cleanup; if ((ret = libxl_device_disk_add(&priv->ctx, vm->def->id, @@ -2360,7 +2360,7 @@ libxlDomainDetachDeviceDiskLive(libxlDomainObjPrivatePtr priv, l_disk = vm->def->disks[i]; - if (libxlMakeDisk(l_disk, &x_disk) < 0) + if (libxlMakeDisk(vm->def, l_disk, &x_disk) < 0) goto cleanup; if ((ret = libxl_device_disk_del(&priv->ctx, &x_disk, -- 2.47.2