Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:olh:xen-4.8
libvirt-7.0.0
libvirt.libxl-Add-support-for-block-dmmd-drbd-n...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File libvirt.libxl-Add-support-for-block-dmmd-drbd-npiv-scripts.patch of Package libvirt-7.0.0
From: "jfehlig@suse.com" <jfehlig@suse.com> Date: Thu, 18 Feb 2016 16:49:00 +0000 Subject: libxl: Add support for block-{dmmd,drbd,npiv} scripts 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 --- src/libxl/libxl_conf.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) --- a/src/libxl/libxl_conf.c +++ b/src/libxl/libxl_conf.c @@ -896,24 +896,43 @@ libxlDiskSetDiscard(libxl_device_disk *x_disk, int discard) } return 0; #else if (discard == VIR_DOMAIN_DISK_DISCARD_DEFAULT) return 0; virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("This version of libxenlight does not support " "disk 'discard' option passing")); return -1; #endif } +static void +libxlDiskSetScript(libxl_device_disk *x_disk, const char *disk_spec) +{ + const char *p = NULL; + + if (disk_spec == NULL) + return; + + if (STRPREFIX(disk_spec, "dmmd:")) + p = "block-dmmd"; + else if (STRPREFIX(disk_spec, "drbd:")) + p = "block-drbd"; + else if (STRPREFIX(disk_spec, "npiv:")) + p = "block-npiv"; + + if (p) + x_disk->script = g_strdup("block-dmmd"); +} + static char * libxlMakeNetworkDiskSrcStr(virStorageSourcePtr src, const char *username, const char *secret) { g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER; size_t i; switch ((virStorageNetProtocol) src->protocol) { case VIR_STORAGE_NET_PROTOCOL_NBD: case VIR_STORAGE_NET_PROTOCOL_HTTP: case VIR_STORAGE_NET_PROTOCOL_HTTPS: @@ -1008,40 +1027,41 @@ libxlMakeNetworkDiskSrc(virStorageSourcePtr src, char **srcstr) ret = 0; cleanup: VIR_DISPOSE_N(secret, secretlen); virObjectUnref(conn); return ret; } int libxlMakeDisk(virDomainDiskDefPtr l_disk, libxl_device_disk *x_disk) { + const char *src = virDomainDiskGetSource(l_disk); const char *driver = virDomainDiskGetDriver(l_disk); int format = virDomainDiskGetFormat(l_disk); int actual_type = virStorageSourceGetActualType(l_disk->src); libxl_device_disk_init(x_disk); if (actual_type == VIR_STORAGE_TYPE_NETWORK) { if (STRNEQ_NULLABLE(driver, "qemu")) { virReportError(VIR_ERR_OPERATION_INVALID, "%s", _("only the 'qemu' driver can be used with network disks")); return -1; } if (libxlMakeNetworkDiskSrc(l_disk->src, &x_disk->pdev_path) < 0) return -1; } else { - x_disk->pdev_path = g_strdup(virDomainDiskGetSource(l_disk)); + x_disk->pdev_path = g_strdup(src); } x_disk->vdev = g_strdup(l_disk->dst); if (driver) { if (STREQ(driver, "tap") || STREQ(driver, "tap2")) { switch (format) { case VIR_STORAGE_FILE_QCOW: x_disk->format = LIBXL_DISK_FORMAT_QCOW; x_disk->backend = LIBXL_DISK_BACKEND_QDISK; break; case VIR_STORAGE_FILE_QCOW2: @@ -1133,24 +1153,26 @@ libxlMakeDisk(virDomainDiskDefPtr l_disk, libxl_device_disk *x_disk) * libxl pick a suitable backend. */ x_disk->format = LIBXL_DISK_FORMAT_RAW; x_disk->backend = LIBXL_DISK_BACKEND_UNKNOWN; } /* XXX is this right? */ x_disk->removable = 1; x_disk->readwrite = !l_disk->src->readonly; x_disk->is_cdrom = l_disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM ? 1 : 0; if (libxlDiskSetDiscard(x_disk, l_disk->discard) < 0) return -1; + libxlDiskSetScript(x_disk, src); + /* 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; if (l_disk->transient) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("libxenlight does not support transient disks")); return -1; } if (l_disk->domain_name) { #ifdef LIBXL_HAVE_DEVICE_BACKEND_DOMNAME x_disk->backend_domname = g_strdup(l_disk->domain_name);
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor