Login | Register For Free | Help
Search for: (Advanced)

Mailing List Archive: Xen: Changelog

[xen-unstable] libxl: write physical-device node if user did not supply a block script

 

 

Xen changelog RSS feed   Index | Next | Previous | View Threaded


patchbot at xen

Aug 7, 2012, 1:33 PM

Post #1 of 1 (34 views)
Permalink
[xen-unstable] libxl: write physical-device node if user did not supply a block script

# HG changeset patch
# User Ian Campbell <Ian.Campbell [at] citrix>
# 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 [at] citrix>
Acked-by: Ian Jackson <Ian.Jackson [at] eu>
Committed-by: Ian Campbell <ian.campbell [at] citrix>
---


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 [at] lists
http://lists.xensource.com/xen-changelog

Xen changelog RSS feed   Index | Next | Previous | View Threaded
 
 


Interested in having your list archived? Contact Gossamer Threads
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.