From: George Dunlap <george.dunlap@citrix.com> To: xen-devel@lists.xen.org Cc: George Dunlap <george.dunlap@eu.citrix.com>, Ian Jackson <ian.jackson@citrix.com>, Wei Liu <wei.liu2@citrix.com>, Roger Pau Monne <roger.pau@citrix.com> Subject: [PATCH v2 4/9] libxl: Move check for local access to a funciton Date: Mon, 21 Mar 2016 18:16:56 +0000 [thread overview] Message-ID: <1458584221-24426-5-git-send-email-george.dunlap@citrix.com> (raw) In-Reply-To: <1458584221-24426-1-git-send-email-george.dunlap@citrix.com> From: George Dunlap <george.dunlap@eu.citrix.com> 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@eu.citrix.com> --- Changes since v1: - Stylistic updates - No space between * and function name in libxl__device_disk_find_local_path - { on start of newline for function - Long line now under 80 characters - Remove redundant check for pdev_path - Space between if and condition - Avoid if ((x=...)) construction CC: Ian Jackson <ian.jackson@citrix.com> CC: Wei Liu <wei.liu2@citrix.com> CC: Roger Pau Monne <roger.pau@citrix.com> --- tools/libxl/libxl.c | 67 +++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 47 insertions(+), 20 deletions(-) diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c index 93f50d3..2d7a154 100644 --- a/tools/libxl/libxl.c +++ b/tools/libxl/libxl.c @@ -3000,13 +3000,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) { + 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; @@ -3014,34 +3039,36 @@ 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"); + + dls->diskpath = libxl__device_disk_find_local_path(gc, in_disk); + if (dls->diskpath) { + 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: -- 2.1.4 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel
next prev parent reply other threads:[~2016-03-21 18:16 UTC|newest] Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-03-21 18:16 [PATCH v2 0/9] tools: Allow HVM domains emulated access to disks provided by hotplug scripts George Dunlap 2016-03-21 18:16 ` [PATCH v2 1/9] tools/hotplug: Add a "dummy" hotplug script for testing George Dunlap 2016-03-21 18:16 ` [PATCH v2 2/9] libxl: Remove redundant setting of phyical-device George Dunlap 2016-03-21 18:16 ` [PATCH v2 3/9] tools/hotplug: Write physical-device-path in addition to physical-device George Dunlap 2016-03-21 18:16 ` George Dunlap [this message] 2016-03-21 18:16 ` [PATCH v2 5/9] libxl: Rearrange qemu upstream disk argument code George Dunlap 2016-03-21 18:16 ` [PATCH v2 6/9] libxl: Share logic for finding path between qemuu and pygrub George Dunlap 2016-03-22 10:38 ` George Dunlap 2016-03-21 18:16 ` [PATCH v2 7/9] libxl: Allow local access for block devices with hotplug scripts George Dunlap 2016-03-21 18:17 ` [PATCH v2 8/9] docs: Document block-script protocol George Dunlap 2016-03-22 12:52 ` Roger Pau Monné 2016-03-23 11:19 ` George Dunlap 2016-03-23 12:14 ` Roger Pau Monné 2016-03-24 16:29 ` George Dunlap 2016-03-24 16:51 ` Roger Pau Monné 2016-03-21 18:17 ` [PATCH v2 9/9] DO NOT APPLY libxl: Change hotplug script interface to use physical-device-path George Dunlap 2016-03-23 10:10 ` [PATCH v2 0/9] tools: Allow HVM domains emulated access to disks provided by hotplug scripts Roger Pau Monné 2016-03-23 10:36 ` George Dunlap
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1458584221-24426-5-git-send-email-george.dunlap@citrix.com \ --to=george.dunlap@citrix.com \ --cc=george.dunlap@eu.citrix.com \ --cc=ian.jackson@citrix.com \ --cc=roger.pau@citrix.com \ --cc=wei.liu2@citrix.com \ --cc=xen-devel@lists.xen.org \ --subject='Re: [PATCH v2 4/9] libxl: Move check for local access to a funciton' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).