Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:olh:xen-4.1
libvirt
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
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 | 23 ++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) --- a/src/libxl/libxl_conf.c +++ b/src/libxl/libxl_conf.c @@ -949,24 +949,43 @@ libxlDiskSetDiscard(libxl_device_disk *x_disk, virDomainDiskDiscard discard) case VIR_DOMAIN_DISK_DISCARD_DEFAULT: case VIR_DOMAIN_DISK_DISCARD_LAST: break; case VIR_DOMAIN_DISK_DISCARD_UNMAP: libxl_defbool_set(&x_disk->discard_enable, true); break; case VIR_DOMAIN_DISK_DISCARD_IGNORE: libxl_defbool_set(&x_disk->discard_enable, false); break; } } +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(virStorageSource *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: @@ -1065,38 +1084,39 @@ libxlMakeNetworkDiskSrc(virStorageSource *src, char **srcstr) *srcstr = libxlMakeNetworkDiskSrcStr(src, username, base64secret); virSecureEraseString(base64secret); if (!*srcstr) return -1; return 0; } int libxlMakeDisk(virDomainDiskDef *l_disk, libxl_device_disk *x_disk) { + const char *src = virDomainDiskGetSource(l_disk); const char *driver = virDomainDiskGetDriver(l_disk); int format = virDomainDiskGetFormat(l_disk); virStorageType actual_type = virStorageSourceGetActualType(l_disk->src); 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: @@ -1179,24 +1199,25 @@ libxlMakeDisk(virDomainDiskDef *l_disk, libxl_device_disk *x_disk) * xl-disk-configuration.txt in the xen documentation and let * 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; libxlDiskSetDiscard(x_disk, l_disk->discard); + 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; } x_disk->backend_domname = g_strdup(l_disk->domain_name); return 0;
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