[libvirt] [PATCH 12/12] qemu: block: add iSER support in qemu block type
by zhangshengyu@fusionstack.cn
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 66e21c4bd..c83ce5718 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -4554,6 +4554,11 @@ virDomainDeviceDefPostParseCommon(virDomainDeviceDefPtr dev,
disk->src->protocol == VIR_STORAGE_NET_PROTOCOL_ISCSI &&
virDomainPostParseCheckISCSIPath(&disk->src->path) < 0)
return -1;
+
+ if (disk->src->type == VIR_STORAGE_TYPE_NETWORK &&
+ disk->src->protocol == VIR_STORAGE_NET_PROTOCOL_ISER &&
+ virDomainPostParseCheckISCSIPath(&disk->src->path) < 0)
+ return -1;
if (disk->bus != VIR_DOMAIN_DISK_BUS_VIRTIO &&
virDomainCheckVirtioOptions(disk->virtio) < 0)
@@ -5160,7 +5165,8 @@ virDomainDiskDefValidate(const virDomainDiskDef *disk)
if (!(disk->src->type == VIR_STORAGE_TYPE_BLOCK ||
disk->src->type == VIR_STORAGE_TYPE_VOLUME ||
(disk->src->type == VIR_STORAGE_TYPE_NETWORK &&
- disk->src->protocol == VIR_STORAGE_NET_PROTOCOL_ISCSI))) {
+ (disk->src->protocol == VIR_STORAGE_NET_PROTOCOL_ISCSI ||
+ disk->src->protocol == VIR_STORAGE_NET_PROTOCOL_ISER)))) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("disk '%s' improperly configured for a "
"device='lun'"), disk->dst);
diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
index 585f0255e..a9543293d 100644
--- a/src/qemu/qemu_block.c
+++ b/src/qemu/qemu_block.c
@@ -831,7 +831,7 @@ qemuBlockStorageSourceGetISCSIProps(virStorageSourcePtr src)
"s:portal", portal,
"s:target", target,
"u:lun", lun,
- "s:transport", "tcp",
+ "s:transport", src->protocol == VIR_STORAGE_NET_PROTOCOL_ISER? "iser":"tcp",
"S:user", username,
"S:password-secret", objalias,
NULL));
@@ -1030,6 +1030,7 @@ qemuBlockStorageSourceGetBackendProps(virStorageSourcePtr src)
break;
case VIR_STORAGE_NET_PROTOCOL_ISCSI:
+ case VIR_STORAGE_NET_PROTOCOL_ISER:
if (!(fileprops = qemuBlockStorageSourceGetISCSIProps(src)))
return NULL;
break;
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 645802795..a21ba0ae4 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -932,6 +932,7 @@ qemuBuildNetworkDriveStr(virStorageSourcePtr src,
case VIR_STORAGE_NET_PROTOCOL_FTPS:
case VIR_STORAGE_NET_PROTOCOL_TFTP:
case VIR_STORAGE_NET_PROTOCOL_ISCSI:
+ case VIR_STORAGE_NET_PROTOCOL_ISER:
case VIR_STORAGE_NET_PROTOCOL_GLUSTER:
ret = qemuBuildNetworkDriveURI(src, secinfo);
break;
@@ -1482,7 +1483,7 @@ qemuDiskSourceNeedsProps(virStorageSourcePtr src,
return true;
if (actualType == VIR_STORAGE_TYPE_NETWORK &&
- src->protocol == VIR_STORAGE_NET_PROTOCOL_ISCSI &&
+ (src->protocol == VIR_STORAGE_NET_PROTOCOL_ISCSI || src->protocol == VIR_STORAGE_NET_PROTOCOL_ISER) &&
virQEMUCapsGet(qemuCaps, QEMU_CAPS_ISCSI_PASSWORD_SECRET))
return true;
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index d7150cae1..76b2a6cc9 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -8133,7 +8133,7 @@ int
qemuDomainDefValidateDiskLunSource(const virStorageSource *src)
{
if (virStorageSourceGetActualType(src) == VIR_STORAGE_TYPE_NETWORK) {
- if (src->protocol != VIR_STORAGE_NET_PROTOCOL_ISCSI) {
+ if (src->protocol != VIR_STORAGE_NET_PROTOCOL_ISCSI && src->protocol != VIR_STORAGE_NET_PROTOCOL_ISER) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("disk device='lun' is not supported "
"for protocol='%s'"),
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index aa30b119a..104b73ebe 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -13983,6 +13983,7 @@ qemuDomainSnapshotPrepareDiskExternalInactive(virDomainSnapshotDiskDefPtr snapdi
case VIR_STORAGE_NET_PROTOCOL_SHEEPDOG:
case VIR_STORAGE_NET_PROTOCOL_GLUSTER:
case VIR_STORAGE_NET_PROTOCOL_ISCSI:
+ case VIR_STORAGE_NET_PROTOCOL_ISER:
case VIR_STORAGE_NET_PROTOCOL_HTTP:
case VIR_STORAGE_NET_PROTOCOL_HTTPS:
case VIR_STORAGE_NET_PROTOCOL_FTP:
@@ -14060,6 +14061,7 @@ qemuDomainSnapshotPrepareDiskExternalActive(virDomainSnapshotDiskDefPtr snapdisk
case VIR_STORAGE_NET_PROTOCOL_RBD:
case VIR_STORAGE_NET_PROTOCOL_SHEEPDOG:
case VIR_STORAGE_NET_PROTOCOL_ISCSI:
+ case VIR_STORAGE_NET_PROTOCOL_ISER:
case VIR_STORAGE_NET_PROTOCOL_HTTP:
case VIR_STORAGE_NET_PROTOCOL_HTTPS:
case VIR_STORAGE_NET_PROTOCOL_FTP:
@@ -14178,6 +14180,7 @@ qemuDomainSnapshotPrepareDiskInternal(virConnectPtr conn,
case VIR_STORAGE_NET_PROTOCOL_SHEEPDOG:
case VIR_STORAGE_NET_PROTOCOL_GLUSTER:
case VIR_STORAGE_NET_PROTOCOL_ISCSI:
+ case VIR_STORAGE_NET_PROTOCOL_ISER:
case VIR_STORAGE_NET_PROTOCOL_HTTP:
case VIR_STORAGE_NET_PROTOCOL_HTTPS:
case VIR_STORAGE_NET_PROTOCOL_FTP:
diff --git a/src/qemu/qemu_parse_command.c b/src/qemu/qemu_parse_command.c
index 5fe3f97d0..72e137ce4 100644
--- a/src/qemu/qemu_parse_command.c
+++ b/src/qemu/qemu_parse_command.c
@@ -709,6 +709,12 @@ qemuParseCommandLineDisk(virDomainXMLOptionPtr xmlopt,
if (qemuParseISCSIString(def) < 0)
goto error;
+ } else if (STRPREFIX(def->src->path, "iser:")) {
+ def->src->type = VIR_STORAGE_TYPE_NETWORK;
+ def->src->protocol = VIR_STORAGE_NET_PROTOCOL_ISER;
+
+ if (qemuParseISCSIString(def) < 0)
+ goto error;
} else if (STRPREFIX(def->src->path, "sheepdog:")) {
char *p = def->src->path;
char *port, *vdi;
@@ -2157,6 +2163,7 @@ qemuParseCommandLine(virCapsPtr caps,
goto error;
break;
+ case VIR_STORAGE_NET_PROTOCOL_ISER:
case VIR_STORAGE_NET_PROTOCOL_ISCSI:
if (qemuParseISCSIString(disk) < 0)
goto error;
diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
index 6594715e5..cf5c2904e 100644
--- a/src/util/virstoragefile.c
+++ b/src/util/virstoragefile.c
@@ -81,6 +81,7 @@ VIR_ENUM_IMPL(virStorageNetProtocol, VIR_STORAGE_NET_PROTOCOL_LAST,
"sheepdog",
"gluster",
"iscsi",
+ "iser",
"http",
"https",
"ftp",
@@ -2750,6 +2751,7 @@ virStorageSourceParseBackingColon(virStorageSourcePtr src,
case VIR_STORAGE_NET_PROTOCOL_FTPS:
case VIR_STORAGE_NET_PROTOCOL_TFTP:
case VIR_STORAGE_NET_PROTOCOL_ISCSI:
+ case VIR_STORAGE_NET_PROTOCOL_ISER:
case VIR_STORAGE_NET_PROTOCOL_GLUSTER:
case VIR_STORAGE_NET_PROTOCOL_SSH:
case VIR_STORAGE_NET_PROTOCOL_VXHS:
@@ -3040,6 +3042,77 @@ virStorageSourceParseBackingJSONiSCSI(virStorageSourcePtr src,
return ret;
}
+static int
+virStorageSourceParseBackingJSONiSER(virStorageSourcePtr src,
+ virJSONValuePtr json,
+ int opaque ATTRIBUTE_UNUSED)
+{
+ const char *transport = virJSONValueObjectGetString(json, "transport");
+ const char *portal = virJSONValueObjectGetString(json, "portal");
+ const char *target = virJSONValueObjectGetString(json, "target");
+ const char *uri;
+ char *port;
+ unsigned int lun = 0;
+ char *fulltarget = NULL;
+ int ret = -1;
+
+ /* legacy URI based syntax passed via 'filename' option */
+ if ((uri = virJSONValueObjectGetString(json, "filename")))
+ return virStorageSourceParseBackingJSONUriStr(src, uri,
+ VIR_STORAGE_NET_PROTOCOL_ISER);
+
+ src->type = VIR_STORAGE_TYPE_NETWORK;
+ src->protocol = VIR_STORAGE_NET_PROTOCOL_ISER;
+
+ if (VIR_ALLOC(src->hosts) < 0)
+ goto cleanup;
+
+ src->nhosts = 1;
+
+ if (STRNEQ_NULLABLE(transport, "iser")) {
+ virReportError(VIR_ERR_INVALID_ARG, "%s",
+ _("only ISER transport is supported for iSER volumes"));
+ goto cleanup;
+ }
+
+ src->hosts->transport = VIR_STORAGE_NET_HOST_TRANS_TCP;
+
+ if (!portal) {
+ virReportError(VIR_ERR_INVALID_ARG, "%s",
+ _("missing 'portal' address in iSER backing definition"));
+ goto cleanup;
+ }
+
+ if (!target) {
+ virReportError(VIR_ERR_INVALID_ARG, "%s",
+ _("missing 'target' in iSER backing definition"));
+ goto cleanup;
+ }
+
+ if (VIR_STRDUP(src->hosts->name, portal) < 0)
+ goto cleanup;
+
+ if ((port = strrchr(src->hosts->name, ':')) &&
+ !strchr(port, ']')) {
+ if (virStringParsePort(port + 1, &src->hosts->port) < 0)
+ goto cleanup;
+
+ *port = '\0';
+ }
+
+ ignore_value(virJSONValueObjectGetNumberUint(json, "lun", &lun));
+
+ if (virAsprintf(&fulltarget, "%s/%u", target, lun) < 0)
+ goto cleanup;
+
+ VIR_STEAL_PTR(src->path, fulltarget);
+
+ ret = 0;
+
+ cleanup:
+ VIR_FREE(fulltarget);
+ return ret;
+}
static int
virStorageSourceParseBackingJSONNbd(virStorageSourcePtr src,
@@ -3295,6 +3368,7 @@ static const struct virStorageSourceJSONDriverParser jsonParsers[] = {
{"tftp", virStorageSourceParseBackingJSONUri, VIR_STORAGE_NET_PROTOCOL_TFTP},
{"gluster", virStorageSourceParseBackingJSONGluster, 0},
{"iscsi", virStorageSourceParseBackingJSONiSCSI, 0},
+ {"iser", virStorageSourceParseBackingJSONiSER, 0},
{"nbd", virStorageSourceParseBackingJSONNbd, 0},
{"sheepdog", virStorageSourceParseBackingJSONSheepdog, 0},
{"ssh", virStorageSourceParseBackingJSONSSH, 0},
@@ -4054,6 +4128,7 @@ virStorageSourceNetworkDefaultPort(virStorageNetProtocol protocol)
return 22;
case VIR_STORAGE_NET_PROTOCOL_ISCSI:
+ case VIR_STORAGE_NET_PROTOCOL_ISER:
return 3260;
case VIR_STORAGE_NET_PROTOCOL_GLUSTER:
diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
index 24382a0a6..33771ddaf 100644
--- a/src/util/virstoragefile.h
+++ b/src/util/virstoragefile.h
@@ -129,6 +129,7 @@ typedef enum {
VIR_STORAGE_NET_PROTOCOL_SHEEPDOG,
VIR_STORAGE_NET_PROTOCOL_GLUSTER,
VIR_STORAGE_NET_PROTOCOL_ISCSI,
+ VIR_STORAGE_NET_PROTOCOL_ISER,
VIR_STORAGE_NET_PROTOCOL_HTTP,
VIR_STORAGE_NET_PROTOCOL_HTTPS,
VIR_STORAGE_NET_PROTOCOL_FTP,
Best Regards,
Charles.
zhangshengyu(a)fusionstack.cn
7 years
[libvirt] [PATCH v2] libvirt-python : PyObject memory leak
by Peng Hao
libvirt_virConnectDomainEventTunableCallback leak a PyObject.
Signed-off-by: Peng Hao <peng.hao2(a)zte.com.cn>
Signed-off-by: Wang Yechao <wang.yechao255(a)zte.com.cn>
---
libvirt-override.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libvirt-override.c b/libvirt-override.c
index d746350..78a7f08 100644
--- a/libvirt-override.c
+++ b/libvirt-override.c
@@ -6662,11 +6662,11 @@ libvirt_virConnectDomainEventTunableCallback(virConnectPtr conn ATTRIBUTE_UNUSED
if (!pyobj_ret) {
DEBUG("%s - ret:%p\n", __FUNCTION__, pyobj_ret);
PyErr_Print();
- Py_XDECREF(pyobj_dict);
} else {
Py_DECREF(pyobj_ret);
ret = 0;
}
+ Py_XDECREF(pyobj_dict);
LIBVIRT_RELEASE_THREAD_STATE;
return ret;
--
1.8.3.1
7 years
[libvirt] [PATCH 0/3] qemu: Clean up PCI controller options
by Andrea Bolognani
See patch 3/3 for an explanation.
Andrea Bolognani (3):
qemu: Add missing checks for pcie-root-port options
tests: Add some tests for PCI controller options
qemu: Clean up PCI controller options
src/qemu/qemu_command.c | 4 +-
src/qemu/qemu_domain.c | 117 +++++++++++++++++++++
.../i440fx-controllers-pciopts.args | 24 +++++
.../i440fx-controllers-pciopts.xml | 36 +++++++
.../pseries-controllers-pciopts.args | 22 ++++
.../pseries-controllers-pciopts.xml | 36 +++++++
.../qemuxml2argvdata/q35-controllers-pciopts.args | 28 +++++
tests/qemuxml2argvdata/q35-controllers-pciopts.xml | 60 +++++++++++
tests/qemuxml2argvtest.c | 17 +++
.../i440fx-controllers-pciopts.xml | 42 ++++++++
tests/qemuxml2xmloutdata/pcie-expander-bus.xml | 4 +-
.../pseries-controllers-pciopts.xml | 41 ++++++++
.../qemuxml2xmloutdata/q35-controllers-pciopts.xml | 63 +++++++++++
tests/qemuxml2xmltest.c | 17 +++
14 files changed, 507 insertions(+), 4 deletions(-)
create mode 100644 tests/qemuxml2argvdata/i440fx-controllers-pciopts.args
create mode 100644 tests/qemuxml2argvdata/i440fx-controllers-pciopts.xml
create mode 100644 tests/qemuxml2argvdata/pseries-controllers-pciopts.args
create mode 100644 tests/qemuxml2argvdata/pseries-controllers-pciopts.xml
create mode 100644 tests/qemuxml2argvdata/q35-controllers-pciopts.args
create mode 100644 tests/qemuxml2argvdata/q35-controllers-pciopts.xml
create mode 100644 tests/qemuxml2xmloutdata/i440fx-controllers-pciopts.xml
create mode 100644 tests/qemuxml2xmloutdata/pseries-controllers-pciopts.xml
create mode 100644 tests/qemuxml2xmloutdata/q35-controllers-pciopts.xml
--
2.14.3
7 years
[libvirt] [PATCH v2 1/3] libxl: add support for multiple IP addresses
by Marek Marczykowski-Górecki
vif-* scripts support it for a long time, and expect addresses to be
separated by spaces. Add appropriate support to libxl driver.
---
changed in v2:
- moved libxlMakeIPList function to xenconfig/xen_common.c and renamed
to xenMakeIPList
---
src/libxl/libxl_conf.c | 5 +++--
src/libxl/libxl_domain.c | 12 ------------
src/xenconfig/xen_common.c | 24 ++++++++++++++++++++++++
src/xenconfig/xen_common.h | 1 +
4 files changed, 28 insertions(+), 14 deletions(-)
diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c
index 2a9be69..970cff2 100644
--- a/src/libxl/libxl_conf.c
+++ b/src/libxl/libxl_conf.c
@@ -49,6 +49,7 @@
#include "virstoragefile.h"
#include "secret_util.h"
#include "cpu/cpu.h"
+#include "xen_common.h"
#define VIR_FROM_THIS VIR_FROM_LIBXL
@@ -1144,7 +1145,7 @@ libxlMakeNic(virDomainDefPtr def,
if (VIR_STRDUP(x_nic->script, l_nic->script) < 0)
goto cleanup;
if (l_nic->guestIP.nips > 0) {
- x_nic->ip = virSocketAddrFormat(&l_nic->guestIP.ips[0]->address);
+ x_nic->ip = xenMakeIPList(&l_nic->guestIP);
if (!x_nic->ip)
goto cleanup;
}
@@ -1160,7 +1161,7 @@ libxlMakeNic(virDomainDefPtr def,
}
if (l_nic->guestIP.nips > 0) {
- x_nic->ip = virSocketAddrFormat(&l_nic->guestIP.ips[0]->address);
+ x_nic->ip = xenMakeIPList(&l_nic->guestIP);
if (!x_nic->ip)
goto cleanup;
}
diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c
index d054b07..395c8a9 100644
--- a/src/libxl/libxl_domain.c
+++ b/src/libxl/libxl_domain.c
@@ -294,18 +294,6 @@ libxlDomainDeviceDefPostParse(virDomainDeviceDefPtr dev,
def->os.type != VIR_DOMAIN_OSTYPE_HVM)
dev->data.chr->targetType = VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_XEN;
- if (dev->type == VIR_DOMAIN_DEVICE_NET &&
- (dev->data.net->type == VIR_DOMAIN_NET_TYPE_BRIDGE ||
- dev->data.net->type == VIR_DOMAIN_NET_TYPE_ETHERNET ||
- dev->data.net->type == VIR_DOMAIN_NET_TYPE_NETWORK)) {
- if (dev->data.net->guestIP.nips > 1) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
- _("multiple IP addresses not supported on device type %s"),
- virDomainNetTypeToString(dev->data.net->type));
- return -1;
- }
- }
-
if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV ||
(dev->type == VIR_DOMAIN_DEVICE_NET &&
dev->data.net->type == VIR_DOMAIN_NET_TYPE_HOSTDEV)) {
diff --git a/src/xenconfig/xen_common.c b/src/xenconfig/xen_common.c
index ded0aca..7f838b6 100644
--- a/src/xenconfig/xen_common.c
+++ b/src/xenconfig/xen_common.c
@@ -1166,6 +1166,30 @@ xenFormatSerial(virConfValuePtr list, virDomainChrDefPtr serial)
return -1;
}
+char *
+xenMakeIPList(virNetDevIPInfoPtr guestIP)
+{
+ size_t i;
+ char **address_array;
+ char *ret = NULL;
+
+ if (VIR_ALLOC_N(address_array, guestIP->nips + 1) < 0)
+ return NULL;
+
+ for (i = 0; i < guestIP->nips; i++) {
+ address_array[i] = virSocketAddrFormat(&guestIP->ips[i]->address);
+ if (!address_array[i])
+ goto cleanup;
+ }
+ address_array[guestIP->nips] = NULL;
+
+ ret = virStringListJoin((const char**)address_array, " ");
+
+ cleanup:
+ while (i > 0)
+ VIR_FREE(address_array[--i]);
+ return ret;
+}
static int
xenFormatNet(virConnectPtr conn,
diff --git a/src/xenconfig/xen_common.h b/src/xenconfig/xen_common.h
index 9055692..3b7a5db 100644
--- a/src/xenconfig/xen_common.h
+++ b/src/xenconfig/xen_common.h
@@ -67,6 +67,7 @@ int xenFormatConfigCommon(virConfPtr conf,
virConnectPtr conn,
const char *nativeFormat);
+char *xenMakeIPList(virNetDevIPInfoPtr guestIP);
int xenDomainDefAddImplicitInputDevice(virDomainDefPtr def);
base-commit: 9f0ccc717ba9026c30ce38951a354dd66fa12e3b
--
git-series 0.9.1
7 years
[libvirt] [PATCH] qemu: Avoid comparing size_t with -1
by Jiri Denemark
ncpus would be -1 on error and the cleanup for loop would not be skipped
in this case.
Signed-off-by: Jiri Denemark <jdenemar(a)redhat.com>
---
src/qemu/qemu_capabilities.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 8c65de956e..9673ef857b 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -2965,7 +2965,7 @@ virQEMUCapsFetchCPUDefinitions(qemuMonitorPtr mon)
size_t i;
if ((ncpus = qemuMonitorGetCPUDefinitions(mon, &cpus)) < 0)
- goto error;
+ return NULL;
if (!(models = virDomainCapsCPUModelsNew(ncpus)))
goto error;
--
2.15.1
7 years
[libvirt] [PATCH 0/2] qemu: Fix upgrade with running domains with host-model CPUs
by Jiri Denemark
When upgrading old libvirt on a host with EPYC host CPU (or any other
CPU which was added to cpu_map.xml in newer libvirt releases), we would
replace host-model CPU definition for running domains to EPYC even
though a different CPU model was used to start the domain. And sync old
libvirt doesn't know about EPYC, migrating the domain to another host
running the same old libvirt would be impossible.
https://bugzilla.redhat.com/show_bug.cgi?id=1521202
Jiri Denemark (2):
qemu: Separate fetching CPU definitions from filling qemuCaps
qemu: Make sure host-model uses CPU model supported by QEMU
src/qemu/qemu_capabilities.c | 59 +++++++++++++++++++++++++++-----------------
src/qemu/qemu_capabilities.h | 1 +
src/qemu/qemu_process.c | 30 ++++++++++++++++++++++
3 files changed, 68 insertions(+), 22 deletions(-)
--
2.15.1
7 years
[libvirt] [PATCH v3] qemuDomainUndefineFlags: Fix error message
by Michal Privoznik
https://bugzilla.redhat.com/show_bug.cgi?id=1522706
If domain is active, but the undefine API was called without the
VIR_DOMAIN_UNDEFINE_KEEP_NVRAM flag set, the following incorrect
error message is produced:
error: Requested operation is not valid: cannot delete inactive domain with nvram
Signed-off-by: Michal Privoznik <mprivozn(a)redhat.com>
---
Diff to v2:
- Drop state from the message completely
src/qemu/qemu_driver.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index aa30b119a..d18cea4d0 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -7538,7 +7538,7 @@ qemuDomainUndefineFlags(virDomainPtr dom,
}
} else if (!(flags & VIR_DOMAIN_UNDEFINE_KEEP_NVRAM)) {
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
- _("cannot delete inactive domain with nvram"));
+ _("cannot delete domain with nvram"));
goto endjob;
}
}
--
2.13.6
7 years
[libvirt] [PATCH] news: mention multiple IP addresses support for Xen
by Jim Fehlig
Signed-off-by: Jim Fehlig <jfehlig(a)suse.com>
---
docs/news.xml | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/docs/news.xml b/docs/news.xml
index 0ec9857e2..7509416ec 100644
--- a/docs/news.xml
+++ b/docs/news.xml
@@ -37,6 +37,12 @@
<section title="New features">
</section>
<section title="Improvements">
+ <change>
+ <summary>
+ Xen: Add support for multiple IP addresses on
+ <code><interface></code> devices
+ </summary>
+ </change>
</section>
<section title="Bug fixes">
</section>
--
2.15.1
7 years