[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v11 03/17] libxl: convert libxl__device_disk_local_attach to an async op



Roger Pau Monne writes ("[PATCH v11 03/17] libxl: convert 
libxl__device_disk_local_attach to an async op"):
> This will be needed in future patches, when libxl__device_disk_add
> becomes async also. Create a new status structure that defines the
> local attach of a disk device and use it in
> libxl__device_disk_local_attach.

Thanks.  Close...

> +void libxl__device_disk_local_initiate_detach(libxl__egc *egc,
> +                                     libxl__disk_local_state *dls)
>  {
> +    STATE_AO_GC(dls->ao);
>      int rc = 0;
> +    libxl_device_disk *disk = &dls->disk;
> +    libxl__device *device;
> +    libxl__ao_device *aodev = &dls->aodev;
> +    libxl__prepare_ao_device(ao, aodev);
> +
> +    if (!dls->diskpath) goto out;
> 
>      switch (disk->backend) {
>          case LIBXL_DISK_BACKEND_QDISK:
...
> +                rc = libxl__device_from_disk(gc, LIBXL_TOOLSTACK_DOMID,
> +                                             disk, device);
> +                if (rc != 0) goto out;
...
>          default:
>              /*
>               * Nothing to do for PHYSTYPE_PHY.
>               * For other device types assume that the blktap2 process is
>               * needed by the soon to be started domain and do nothing.
>               */
> -            break;
> +            goto out;
>      }
> 
> +out:
> +    local_device_detach_cb(egc, aodev);

Doesn't this lose the rc ?  Since...

...
> +static void local_device_detach_cb(libxl__egc *egc, libxl__ao_device *aodev)
> +{
> +    STATE_AO_GC(aodev->ao);
> +    libxl__disk_local_state *dls = CONTAINER_OF(aodev, *dls, aodev);
> +    int rc;
> +
> +    if (aodev->rc) {

... this picks the rc out of the aodev.  And you don't set aodev->rc.
The general code in libxl__device_disk_local_initiate_detach expects
(as is conventional) to set the local variable rc and `goto out'.  So
I think you need
  +    aodev->rc = rc;

> @@ -2097,10 +2142,10 @@ struct libxl__bootloader_state {
>      /* Should be zeroed by caller on entry.  Will be filled in by
>       * bootloader machinery; represents the local attachment of the
>       * disk for the benefit of the bootloader.  Must be detached by
> -     * the caller using libxl__device_disk_local_detach, but only
> +     * the caller using libxl__device_disk_local_initiate_detach, but only
>       * after the domain's kernel and initramfs have been loaded into
>       * memory and the file references disposed of. */

I queried this and you replied:
> I didn't change this comment, but if you want I can do that in this
> patch. The bootloader makes a copy of the kernel/initramfs to somewhere,
> and that is what we load to the memory.

Right.  The comment is wrong, but you're not making it wronger, so
this is something for me to fix up.

Ian.

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.