[libvirt] [PATCHv3 1/4] Populate domid field of devices for libxenlight

Jim Fehlig jfehlig at novell.com
Tue May 31 02:26:11 UTC 2011


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




More information about the libvir-list mailing list