[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] libxl: write physical-device node if user did not supply a block script
# HG changeset patch # User Ian Campbell <Ian.Campbell@xxxxxxxxxx> # Date 1344345989 -3600 # Node ID 8ecd9177d977941c0b9638a2ae0a567ce58e8920 # Parent 817f5f381d1bb443fb4c517829dca5f47acca9ab libxl: write physical-device node if user did not supply a block script This reverts one of the intentional changes from 25733:353bc0801b11. That change exposed an issue with the xl migration protocol, which although safe triggers the hotplug scripts device sharing logic. For 4.2 we disable this logic by writing the physical-device xenstore node ourselves if a user did not supply a script. If the user did supply a script then we continue to rely on it to write the physical-device node (not least because the script may create the device and therefore it is not available before we run the script). This means that to support localhost migration a block hotplug script needs to be robust against adding a device twice and should not deactivate the device until it has been removed twice. This should be revisited for 4.3. Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx> Acked-by: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx> Committed-by: Ian Campbell <ian.campbell@xxxxxxxxxx> --- diff -r 817f5f381d1b -r 8ecd9177d977 tools/libxl/libxl.c --- a/tools/libxl/libxl.c Tue Aug 07 15:09:17 2012 +0200 +++ b/tools/libxl/libxl.c Tue Aug 07 14:26:29 2012 +0100 @@ -1845,18 +1845,31 @@ static void device_disk_add(libxl__egc * case LIBXL_DISK_BACKEND_PHY: dev = disk->pdev_path; - script = libxl__abs_path(gc, disk->script ?: "block", - libxl__xen_script_dir_path()); - do_backend_phy: flexarray_append(back, "params"); flexarray_append(back, dev); - assert(script); + script = libxl__abs_path(gc, disk->script?: "block", + libxl__xen_script_dir_path()); flexarray_append_pair(back, "script", script); + /* If the user did not supply a block script then we + * write the physical-device node ourselves. + * + * If the user did supply a script then that script is + * responsible for this since the block device may not + * exist yet. + */ + if (!disk->script) { + int major, minor; + libxl__device_physdisk_major_minor(dev, &major, &minor); + flexarray_append_pair(back, "physical-device", + libxl__sprintf(gc, "%x:%x", major, minor)); + } + assert(device->backend_kind == LIBXL__DEVICE_KIND_VBD); break; + case LIBXL_DISK_BACKEND_TAP: dev = libxl__blktap_devpath(gc, disk->pdev_path, disk->format); if (!dev) { @@ -1870,12 +1883,9 @@ static void device_disk_add(libxl__egc * libxl__device_disk_string_of_format(disk->format), disk->pdev_path)); - /* - * tap devices do not support custom block scripts and - * always use the plain block script. - */ - script = libxl__abs_path(gc, "block", - libxl__xen_script_dir_path()); + /* tap backends with scripts are rejected by + * libxl__device_disk_set_backend */ + assert(!disk->script); /* now create a phy device to export the device to the guest */ goto do_backend_phy; _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |