[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH RFC for-4.6 1/4] libxl: Move check for local access to a funciton
On Mon, Aug 10, 2015 at 8:11 PM, George Dunlap <george.dunlap@xxxxxxxxxxxxx> wrote: > Move pygrub checks for local access ability into a separate function. > > Also reorganize libxl__device_disk_local_initiate_attach so that we > don't initialize dls->disk unless we actually end up doing a local > attach. > > Signed-off-by: George Dunlap <george.dunlap@xxxxxxxxxxxxx> This series works for me with the "block-dummy" script, both for HVM and for PV (with pygrub). It probably still needs a bit of work to get in, but I won't be able to work on it anymore. I hope someone can pick it up and get it in. Otherwise hotplug scripts for qemu will have to wait until 4.7. Thanks, -George > --- > CC: Ian Campbell <ian.campbell@xxxxxxxxxx> > CC: Ian Jackson <ian.jackson@xxxxxxxxxx> > CC: Wei Liu <wei.liu2@xxxxxxxxxx> > CC: Roger Pau Monne <roger.pau@xxxxxxxxxx> > --- > tools/libxl/libxl.c | 66 > +++++++++++++++++++++++++++++++++++++---------------- > 1 file changed, 46 insertions(+), 20 deletions(-) > > diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c > index 083f099..e402c80 100644 > --- a/tools/libxl/libxl.c > +++ b/tools/libxl/libxl.c > @@ -3046,13 +3046,38 @@ static char * libxl__alloc_vdev(libxl__gc *gc, void > *get_vdev_user, > > /* Callbacks */ > > +static char * libxl__device_disk_find_local_path(libxl__gc *gc, > + const libxl_device_disk > *disk) { > + char *path = NULL; > + > + /* No local paths for driver domains */ > + if (disk->backend_domname != NULL) { > + LOG(DEBUG, "Non-local backend, can't access locally.\n"); > + goto out; > + } > + > + /* > + * If this is in raw format, and we're not using a script or a > + * driver domain, we can access the target path directly. > + */ > + if (disk->format == LIBXL_DISK_FORMAT_RAW > + && disk->script == NULL > + && disk->pdev_path) { > + path = libxl__strdup(gc, disk->pdev_path); > + LOG(DEBUG, "Directly accessing local RAW disk %s", path); > + goto out; > + } > + > + out: > + return path; > +} > + > static void local_device_attach_cb(libxl__egc *egc, libxl__ao_device *aodev); > > void libxl__device_disk_local_initiate_attach(libxl__egc *egc, > libxl__disk_local_state *dls) > { > STATE_AO_GC(dls->ao); > - char *dev = NULL; > int rc; > const libxl_device_disk *in_disk = dls->in_disk; > libxl_device_disk *disk = &dls->disk; > @@ -3060,34 +3085,35 @@ void > libxl__device_disk_local_initiate_attach(libxl__egc *egc, > > assert(in_disk->pdev_path); > > - memcpy(disk, in_disk, sizeof(libxl_device_disk)); > - disk->pdev_path = libxl__strdup(gc, in_disk->pdev_path); > - if (in_disk->script != NULL) > - disk->script = libxl__strdup(gc, in_disk->script); > disk->vdev = NULL; > > - rc = libxl__device_disk_setdefault(gc, disk); > - if (rc) goto out; > + if(dls->diskpath) > + LOG(DEBUG, "Strange, dls->diskpath already set: %s", dls->diskpath); > > - /* If this is in a driver domain, or it's not a raw format, or it > involves > - * running a script, we have to do a local attach. */ > - if (disk->backend_domname != NULL > - || disk->format != LIBXL_DISK_FORMAT_RAW > - || disk->script != NULL) { > + LOG(DEBUG, "Trying to find local path"); > + > + if ((dls->diskpath = libxl__device_disk_find_local_path(gc, in_disk))) { > + LOG(DEBUG, "Local path found, executing callback."); > + dls->callback(egc, dls, 0); > + } else { > + LOG(DEBUG, "Local path not found, initiating attach."); > + > + memcpy(disk, in_disk, sizeof(libxl_device_disk)); > + disk->pdev_path = libxl__strdup(gc, in_disk->pdev_path); > + if (in_disk->script != NULL) > + disk->script = libxl__strdup(gc, in_disk->script); > + disk->vdev = NULL; > + > + rc = libxl__device_disk_setdefault(gc, disk); > + if (rc) goto out; > + > + /* If we can't find a local path, attach it */ > libxl__prepare_ao_device(ao, &dls->aodev); > dls->aodev.callback = local_device_attach_cb; > device_disk_add(egc, LIBXL_TOOLSTACK_DOMID, disk, &dls->aodev, > libxl__alloc_vdev, (void *) blkdev_start); > - return; > } > > - LOG(DEBUG, "locally attaching RAW disk %s", disk->pdev_path); > - dev = disk->pdev_path; > - > - if (dev != NULL) > - dls->diskpath = libxl__strdup(gc, dev); > - > - dls->callback(egc, dls, 0); > return; > > out: > -- > 1.9.1 > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxx > http://lists.xen.org/xen-devel _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |