diff --git a/libvirt.changes b/libvirt.changes index fc0af04..6d398b6 100644 --- a/libvirt.changes +++ b/libvirt.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Thu Feb 18 16:49:00 UTC 2016 - jfehlig@suse.com + +- libxl: Add support for block-{dmmd,drbd,npiv} scripts + libxl-support-block-script.patch + bsc#954872 + ------------------------------------------------------------------- Sat Jan 23 01:19:22 UTC 2016 - jfehlig@suse.com diff --git a/libvirt.spec b/libvirt.spec index 116a1cf..4047b1a 100644 --- a/libvirt.spec +++ b/libvirt.spec @@ -475,10 +475,11 @@ Patch205: suse-qemu-conf.patch Patch206: support-managed-pci-xen-driver.patch Patch207: systemd-service-xen.patch Patch208: xen-sxpr-disk-type.patch -Patch209: apparmor-no-mount.patch -Patch210: qemu-apparmor-screenshot.patch -Patch211: libvirt-suse-netcontrol.patch -Patch212: lxc-wait-after-eth-del.patch +Patch209: libxl-support-block-script.patch +Patch210: apparmor-no-mount.patch +Patch211: qemu-apparmor-screenshot.patch +Patch212: libvirt-suse-netcontrol.patch +Patch213: lxc-wait-after-eth-del.patch # SocketUser and SocketGroup settings were added to systemd.socket in # version 214. Patch the setting away in earlier systemd %if 0%{systemd_version} < 214 @@ -992,6 +993,7 @@ Wireshark dissector plugin for better analysis of libvirt RPC traffic. %patch210 -p1 %patch211 -p1 %patch212 -p1 +%patch213 -p1 %if 0%{systemd_version} < 214 %patch300 -p1 %endif diff --git a/libxl-support-block-script.patch b/libxl-support-block-script.patch new file mode 100644 index 0000000..b571030 --- /dev/null +++ b/libxl-support-block-script.patch @@ -0,0 +1,61 @@ +libxl: set script field of libxl_device_disk + +Add a hack to the libvirt libxl driver to set +libxl_device_disk->script when the disk configuration starts +with some well-known Xen external block scripts: dmmd, drbd, +and npiv. + +For more details, see bsc#954872 and FATE#319810 + +Index: libvirt-1.3.1/src/libxl/libxl_conf.c +=================================================================== +--- libvirt-1.3.1.orig/src/libxl/libxl_conf.c ++++ libvirt-1.3.1/src/libxl/libxl_conf.c +@@ -887,6 +887,22 @@ libxlDiskSetDiscard(libxl_device_disk *x + } + + ++static int ++libxlDiskSetScript(libxl_device_disk *x_disk, const char *disk_spec) ++{ ++ if (STRPREFIX(disk_spec, "dmmd:")) { ++ if (VIR_STRDUP(x_disk->script, "block-dmmd") < 0) ++ return -1; ++ } else if (STRPREFIX(disk_spec, "drbd:")) { ++ if (VIR_STRDUP(x_disk->script, "block-drbd") < 0) ++ return -1; ++ } else if (STRPREFIX(disk_spec, "npiv:")) { ++ if (VIR_STRDUP(x_disk->script, "block-npiv") < 0) ++ return -1; ++ } ++ return 0; ++} ++ + #define LIBXL_QEMU_DM_STR "Options specific to the Xen version:" + + int +@@ -921,12 +937,13 @@ libxlDomainGetEmulatorType(const virDoma + int + libxlMakeDisk(virDomainDiskDefPtr l_disk, libxl_device_disk *x_disk) + { ++ const char *src = virDomainDiskGetSource(l_disk); + const char *driver; + int format; + + libxl_device_disk_init(x_disk); + +- if (VIR_STRDUP(x_disk->pdev_path, virDomainDiskGetSource(l_disk)) < 0) ++ if (VIR_STRDUP(x_disk->pdev_path, src) < 0) + return -1; + + if (VIR_STRDUP(x_disk->vdev, l_disk->dst) < 0) +@@ -1034,6 +1051,9 @@ libxlMakeDisk(virDomainDiskDefPtr l_disk + x_disk->is_cdrom = l_disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM ? 1 : 0; + if (libxlDiskSetDiscard(x_disk, l_disk->discard) < 0) + return -1; ++ if (libxlDiskSetScript(x_disk, src) < 0) ++ return -1; ++ + /* An empty CDROM must have the empty format, otherwise libxl fails. */ + if (x_disk->is_cdrom && !x_disk->pdev_path) + x_disk->format = LIBXL_DISK_FORMAT_EMPTY;