Markus Groß wrote: > This patch fixes the population of the > libxenlight data structures. Now the devices > should be removed correctly from the xenstore > if they are detached. > ACK. I've pushed this patch since it is a bug fix to the new disk attach/detach support in the libxenlight driver. Thanks Markus, Jim > --- > 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 b58678a..0f6035e 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 5707b4e..bf5a50d 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 312d414..5463b90 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, > -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list