|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v7 02/11] libxl: libxl__device_disk_local_attach return a new libxl_device_disk
On Tue, 22 May 2012, Ian Jackson wrote:
> Stefano Stabellini writes ("[PATCH v7 02/11] libxl:
> libxl__device_disk_local_attach return a new libxl_device_disk"):
> > Introduce a new libxl_device_disk* parameter to
> > libxl__device_disk_local_attach, the parameter is allocated by the
> > caller. libxl__device_disk_local_attach is going to fill the new disk
> > with informations about the new locally attached disk. The new
> > libxl_device_disk should be passed to libxl_device_disk_local_detach
> > afterwards.
>
> Thanks.
>
> So comparing the comment:
>
> > + /* 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
> > + * after the domain's kernel and initramfs have been loaded into
> > + * memory and the file references disposed of. */
> > + libxl_device_disk localdisk;
>
> with the code in the caller: on entry it is indeed zeroed by the GCNEW
> of the whole domain_create_state. However on exit:
>
> > if (bl->diskpath) {
> > - libxl__device_disk_local_detach(gc, bl->disk);
> > + libxl__device_disk_local_detach(gc, &bl->localdisk);
> > + free(bl->localdisk.pdev_path);
> > + free(bl->localdisk.script);
> > free(bl->diskpath);
>
> This does not correspond exactly to the comment. Not only do we call
> detach but apparently we need to free some things too.
>
> It's not clear to me why these things haven't come from a suitable
> gc. But if they can't come from a gc then the comment needs to
> mention that they need to be freed.
>
> > -char * libxl__device_disk_local_attach(libxl__gc *gc, libxl_device_disk
> > *disk)
> > +char * libxl__device_disk_local_attach(libxl__gc *gc,
> > + const libxl_device_disk *in_disk,
> > + libxl_device_disk *disk)
> > {
> > libxl_ctx *ctx = gc->owner;
> > char *dev = NULL;
> > char *ret = NULL;
> > int rc;
> >
> > + if (in_disk->pdev_path == NULL)
> > + return NULL;
> > +
> > + memcpy(disk, in_disk, sizeof(libxl_device_disk));
> > + disk->pdev_path = strdup(in_disk->pdev_path);
> > + if (in_disk->script != NULL)
> > + disk->script = strdup(in_disk->script);
> > + disk->vdev = NULL;
>
> Re my comment about the gc, do we call this function anywhere else ?
> Could it take the ao for the benefit of its gc ? Would that violate
> some rules about the usual contents of a libxl_device_disk ?
I am not sure I want to get into the whole AO thing at this point.
Am I supposed to just change the libxl__gc *gc argument into libxl__ao
*ao and then call STATE_AO_GC on function entry?
Then remove the free(bl->localdisk.script) and
free(bl->localdisk.pdev_path)?
Anything else is required?
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |