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.
This commit is contained in:
Markus Groß 2011-05-30 11:53:00 +02:00 committed by Jim Fehlig
parent 80d2038d58
commit 648b521e0d
3 changed files with 22 additions and 14 deletions

View File

@ -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;
}

View File

@ -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,

View File

@ -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,