[libvirt] [PATCH] virNetworkDefUpdateDNSHost: Require both IP and a hostname to match
by W. Trevor King
Since fc19a0059 (network: backend functions for updating network dns
host/srv/txt, 2012-11-12), the matching logic for various network
components has been:
1) for HOST records, it's considered a match if the IP address or any
of the hostnames of an existing record matches.
2) for SRV records, it's a match if all of
domain+service+protocol+target *which have been specified* are
matched.
3) for TXT records, there is only a single field to match - name
(value can be the same for multiple records, and isn't considered a
search term), so by definition there can be no ambiguous matches.
But HOST records can have the same hostname for multiple records
(similar to TXT records with the same value). The value that needs to
be distinct for HOST records is the IP address. This commit updates
the matching logic to only consider the IP address. Compared to the
previous HOST logic:
1. You can now delete entries from an existing network like:
<dns>
<host ip="192.168.1.1">
<hostname>example</hostname>
</host>
<host ip="192.168.1.2">
<hostname>example</hostname>
</host>
</dns>
with input like:
<host ip="192.168.1.1">
</host>
or:
<host ip="192.168.1.1">
<hostname>example</hostname>
</host>
Previously, only the former would work (the latter used to raise
"multiple matching DNS HOST records were found in network").
2. You can no longer remove entries by hostname alone. Previously,
you may have been able to remove an entry from an existing network
like:
<dns>
<host ip="192.168.1.1">
<hostname>example-1</hostname>
</host>
<host ip="192.168.1.2">
<hostname>example-2</hostname>
</host>
</dns>
with input like:
<host name="example">
<hostname>example-1</hostname>
</host>
using the 'name' property to get through the partialOkay check in
virNetworkDHCPHostDefParseXML. Now that input will raise "Missing
IP address in network '%s' DNS HOST record".
3. You can now add multiple entries with a common hostname (as long as
they have distinct IP addresses). Previously, adding:
<host ip="192.168.1.1">
<hostname>example</hostname>
</host>
to an existing:
<host ip="192.168.1.2">
<hostname>example</hostname>
</host>
would have raised "there is already at least one DNS HOST record
with a matching field in network".
---
I'm actually not clear on whether the 'ip' attribute is required to be
unique or not. If not, maybe the logic should be:
* Deletes with just an IP remove all <host> entries that match that
IP.
* Deletes with just a hostname remove all <hostname> entries that
match that hostname.
* Deletes with an IP and a hostname remove matching <hostname> entries
from <host> entries which match the IP.
* If <hostname> removal completely empties a <host>, the <host> is
also removed.
Thoughts?
src/conf/network_conf.c | 31 ++++++++++---------------------
1 file changed, 10 insertions(+), 21 deletions(-)
diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
index 39a13b4..8ed62ac 100644
--- a/src/conf/network_conf.c
+++ b/src/conf/network_conf.c
@@ -587,14 +587,14 @@ virNetworkDNSHostDefParseXML(const char *networkName,
xmlNodePtr cur;
char *ip;
- if (!(ip = virXMLPropString(node, "ip")) && !partialOkay) {
+ if (!(ip = virXMLPropString(node, "ip"))) {
virReportError(VIR_ERR_XML_DETAIL,
_("Missing IP address in network '%s' DNS HOST record"),
networkName);
goto error;
}
- if (ip && (virSocketAddrParse(&def->ip, ip, AF_UNSPEC) < 0)) {
+ if (virSocketAddrParse(&def->ip, ip, AF_UNSPEC) < 0) {
virReportError(VIR_ERR_XML_DETAIL,
_("Invalid IP address in network '%s' DNS HOST record"),
networkName);
@@ -603,6 +603,13 @@ virNetworkDNSHostDefParseXML(const char *networkName,
}
VIR_FREE(ip);
+ if (!VIR_SOCKET_ADDR_VALID(&def->ip)) {
+ virReportError(VIR_ERR_XML_DETAIL,
+ _("Invalid IP address in network '%s' DNS HOST record"),
+ networkName);
+ goto error;
+ }
+
cur = node->children;
while (cur != NULL) {
if (cur->type == XML_ELEMENT_NODE &&
@@ -631,13 +638,6 @@ virNetworkDNSHostDefParseXML(const char *networkName,
goto error;
}
- if (!VIR_SOCKET_ADDR_VALID(&def->ip) && def->nnames == 0) {
- virReportError(VIR_ERR_XML_DETAIL,
- _("Missing ip and hostname in network '%s' DNS HOST record"),
- networkName);
- goto error;
- }
-
return 0;
error:
@@ -3334,18 +3334,7 @@ virNetworkDefUpdateDNSHost(virNetworkDefPtr def,
goto cleanup;
for (i = 0; i < dns->nhosts; i++) {
- bool foundThisTime = false;
-
- if (virSocketAddrEqual(&host.ip, &dns->hosts[i].ip))
- foundThisTime = true;
-
- for (j = 0; j < host.nnames && !foundThisTime; j++) {
- for (k = 0; k < dns->hosts[i].nnames && !foundThisTime; k++) {
- if (STREQ(host.names[j], dns->hosts[i].names[k]))
- foundThisTime = true;
- }
- }
- if (foundThisTime) {
+ if virSocketAddrEqual(&host.ip, &dns->hosts[i].ip) {
foundCt++;
foundIdx = i;
}
--
1.8.3.1
6 years
[libvirt] Parsing of memory.stat in libvirt
by Peter.Chubb@data61.csiro.au
Hi Folks,
libvirt currently spams the logs with
error : virCgroupGetMemoryStat:2490 : internal error: Cannot parse 'memory.stat' cgroup file
whenever someone does ps in a container.
This is because the parser for memory/stat is incorrect: the `line'
variable is never updated, so each time through the loop, the same
start-of-line is compared for the token; and as all spaces are
eventually replaced with NUL the error exit is taken instead of
ending the loop properly.
Here is a strawman patch to fix the problem. Please note, I'm not
subscribed to this list; I reported the bug as
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=913023 and was asked
to send the patch upstream.
src/util/vircgroup.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
--- libvirt.orig/src/util/vircgroup.c
+++ libvirt/src/util/vircgroup.c
@@ -2477,7 +2477,7 @@ virCgroupGetMemoryStat(virCgroupPtr grou
line = stat;
- while (line) {
+ while (*line) {
char *newLine = strchr(line, '\n');
char *valueStr = strchr(line, ' ');
unsigned long long value;
@@ -2507,6 +2507,11 @@ virCgroupGetMemoryStat(virCgroupPtr grou
inactiveFileVal = value >> 10;
else if (STREQ(line, "unevictable"))
unevictableVal = value >> 10;
+
+ if (newLine)
+ line = newLine + 1;
+ else
+ break;
}
*cache = cacheVal;
--
Dr Peter Chubb Tel: +61 2 9490 5852 http://ts.data61.csiro.au/
Trustworthy Systems Group Data61 (formerly NICTA)
6 years
[libvirt] [PATCH] tests: Use correct function name in error path
by John Ferlan
Commit id 5eb61e6846 neglected to change the name in the wrong value
output to virCgroupGetPercpuStats from virCgroupGetMemoryUsage.
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
---
Pushed under the trivial rule.
tests/vircgrouptest.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/vircgrouptest.c b/tests/vircgrouptest.c
index 8fcee21bb2..310e1fb6a2 100644
--- a/tests/vircgrouptest.c
+++ b/tests/vircgrouptest.c
@@ -756,7 +756,7 @@ static int testCgroupGetPercpuStats(const void *args ATTRIBUTE_UNUSED)
if (params[i].value.ul != expected[i]) {
fprintf(stderr,
- "Wrong value from virCgroupGetMemoryUsage at %zu (expected %llu)\n",
+ "Wrong value from virCgroupGetPercpuStats at %zu (expected %llu)\n",
i, params[i].value.ul);
goto cleanup;
}
--
2.17.2
6 years
[libvirt] [PATCH 0/3] qemu: don't duplicate suspended events and state changes
by Nikolay Shirokovskiy
This patch series is similar in implementation to [1] but the motivation
is simply to avoid suspended event duplication.
[1] https://www.redhat.com/archives/libvir-list/2018-September/msg01304.html
Nikolay Shirokovskiy (3):
qemu: pass stop reason from qemuProcessStopCPUs to stop handler
qemu: map suspended state reason to suspended event detail
qemu: don't duplicate suspended events and state changes
src/qemu/qemu_domain.c | 34 ++++++++++++++++++++++++++++++++++
src/qemu/qemu_domain.h | 7 +++++++
src/qemu/qemu_driver.c | 26 +++-----------------------
src/qemu/qemu_migration.c | 42 ++++++------------------------------------
src/qemu/qemu_migration.h | 4 ----
src/qemu/qemu_process.c | 37 +++++++++++++++++++++++++------------
6 files changed, 75 insertions(+), 75 deletions(-)
--
1.8.3.1
6 years
[libvirt] [PATCH] qemu: Don't ignore resume events
by Jiri Denemark
Since commit v4.7.0-302-ge6d77a75c4 processing RESUME event is mandatory
for updating domain state. But the event handler explicitly ignored this
event in some cases. Thus the state would be wrong after a fake reboot
or when a domain was rebooted after it crashed.
BTW, the code to ignore RESUME event after SHUTDOWN didn't make sense
even before making RESUME event mandatory. Most likely it was there as a
result of careless copy&paste from qemuProcessHandleStop.
https://bugzilla.redhat.com/show_bug.cgi?id=1612943
Signed-off-by: Jiri Denemark <jdenemar(a)redhat.com>
---
src/qemu/qemu_process.c | 8 +-------
1 file changed, 1 insertion(+), 7 deletions(-)
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index c698c3b29c..59ca7cd333 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -719,12 +719,7 @@ qemuProcessHandleResume(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
priv->runningReason = VIR_DOMAIN_RUNNING_UNKNOWN;
}
- if (virDomainObjGetState(vm, NULL) == VIR_DOMAIN_PAUSED) {
- if (priv->gotShutdown) {
- VIR_DEBUG("Ignoring RESUME event after SHUTDOWN");
- goto unlock;
- }
-
+ if (virDomainObjGetState(vm, NULL) != VIR_DOMAIN_RUNNING) {
eventDetail = qemuDomainRunningReasonToResumeEvent(reason);
VIR_DEBUG("Transitioned guest %s out of paused into resumed state, "
"reason '%s', event detail %d",
@@ -742,7 +737,6 @@ qemuProcessHandleResume(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
}
}
- unlock:
virObjectUnlock(vm);
virObjectEventStateQueue(driver->domainEventState, event);
virObjectUnref(cfg);
--
2.19.1
6 years
[libvirt] [PATCH] qemu: snapshot: better error for active external readonly disk
by Nikolay Shirokovskiy
External snapshot of readonly disk of active domain is impossible but error
message [1] is cryptic (it's source is qemu). Let's make error message more
user friendly.
The problem is libvirtd precreates snapshot image with no write permission which
is not expected by qemu.
[1] current error message
error: internal error: unable to execute QEMU command 'transaction':
Could not create file: Permission denied
Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy(a)virtuozzo.com>
---
By the way if domain is not active then snapshot is possible. However top image
will have write permissions after snapshot. We can make snapshot work for
active domain I guess if we precreate writable snapshot image, but then we end
up running readonly disk on writable image. Also making snapshot of readonly
disk is not that practical so let's just fix error message for now.
src/qemu/qemu_driver.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index a52e249..e75931e 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -14683,6 +14683,14 @@ qemuDomainSnapshotPrepare(virDomainObjPtr vm,
active, reuse) < 0)
goto cleanup;
+ if (dom_disk->src->readonly && active) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("external snapshot for readonly disk %s "
+ "of active domain is not supported"),
+ disk->name);
+ goto cleanup;
+ }
+
external++;
break;
--
1.8.3.1
6 years
[libvirt] [PATCH v2 0/8] Usb hub Cold(un)plug and hot(un)plug support
by Han Han
v1: https://www.redhat.com/archives/libvir-list/2018-October/msg00563.html
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1375423
Han Han (8):
qemu: Allow coldplugging of hub device
qemu: Allow coldunplugging of hub device
qemu_alias: Refactor hub alias assignment for hotplug
qemu_command: Make qemuBuildHubDevStr global
private_syms: add virDomainHubDefFree to libvirt_private.syms
qemu: implement usb hub device hotplug
qemu: implement usb hub device hotunplug
news: Cold(un)plug and hot(un)plug support for usb hub device
docs/news.xml | 5 ++
src/conf/domain_conf.c | 30 +++++++++
src/conf/domain_conf.h | 3 +
src/libvirt_private.syms | 2 +
src/qemu/qemu_alias.c | 22 +++++--
src/qemu/qemu_alias.h | 4 ++
src/qemu/qemu_command.c | 2 +-
src/qemu/qemu_command.h | 4 ++
src/qemu/qemu_driver.c | 30 +++++++--
src/qemu/qemu_hotplug.c | 132 ++++++++++++++++++++++++++++++++++++++-
src/qemu/qemu_hotplug.h | 12 ++++
11 files changed, 236 insertions(+), 10 deletions(-)
--
2.19.1
6 years
[libvirt] [PATCH v3 00/20] Incremental Backup API additions
by Eric Blake
The following is the latest version of my API proposal for
incremental backups, and matches the demo I will be presenting
as part of my KVM Forum 2018 talk tomorrow afternoon:
https://kvmforum2018.sched.com/event/FzuB/facilitating-incremental-backup...
The patches are also available via https://repo.or.cz/libvirt/ericb.git
at the tag backup-v3.
The qemu integration is still incomplete (I don't have push
mode backups working, only pull mode; and there are still some
things to fine-tune as I figure out how to better support
external snapshots and block commit/stream), and I still haven't
gotten any opinions on whether it is better to have:
virDomainSnapshotCreateXML("<domainsnapshot>...") # existing
virDomainBackupBegin("<domainbackup>...", "<domaincheckpoint>...") # this series
virDomainSnapshotCheckpointCreateXML("<domainsnapshot>...", "<domaincheckpoint>...") # new
or to make checkpoint creation part of the snapshot and backup XML, as in:
virDomainSnapshotCreateXML("<domainsnapshot><domaincheckpoint>...</domainsnapshot>") # extension of existing
virDomainBackupBegin("<domainbackup><domaincheckpoint>...</domainbackup>") # tweak to this series
It's also obvious that we don't want to check in the qemu implementation
until after Peter's blockdev work has landed AND qemu has gotten rid
of the x- prefix in its QMP interactions, although the state of this
series SHOULD be sufficient to prove that the proposed interface is
at least flexible enough to adapt to whatever qemu tweaks land and
whatever other hypervisors may support. Whether to accept the API now
(to make backporting qemu support downstream across versions without
rebasing to an even later date for the API) is a harder question;
Jirka has already expressed distaste at the idea.
There are probably still loads of things needing fixing in this version,
I already know I did not address all of Peter's review comments on v2.
My unit test coverage is not very complete on the XML parsing, and there
are definitely some hacks in place to get things to the point of a working
demo that need to be polished for robustness.
Below is a diff since the v2 posting (patches 1-10 here, for later
patches a comparison against the state of my tree at the time I posted v2):
https://www.redhat.com/archives/libvir-list/2018-October/msg00700.html
001/20:[----] [--] 'snapshots: Avoid term 'checkpoint' for full system snapshot'
002/20:[----] [--] 'domain_conf: Expose virDomainStorageNetworkParseHost'
003/20:[down] 'qemu: Allow optional export name during NBD export'
004/20:[----] [--] 'backup: Document nuances between different state capture APIs'
005/20:[----] [--] 'backup: Introduce virDomainCheckpointPtr'
006/20:[0012] [FC] 'backup: Document new XML for backups'
007/20:[----] [--] 'backup: Introduce virDomainCheckpoint APIs'
008/20:[0024] [FC] 'backup: Introduce virDomainBackup APIs'
009/20:[----] [--] 'backup: Add new domain:checkpoint access control'
010/20:[0001] [FC] 'backup: Implement backup APIs for remote driver'
011/20:[0007] [FC] 'wip: backup: Parse and output checkpoint XML'
012/20:[0199] [FC] 'wip: backup: Parse and output backup XML'
013/20:[----] [--] 'backup: Implement virsh support for checkpoints'
014/20:[----] [--] 'wip: backup: virsh support for backup'
015/20:[0223] [FC] 'backup: Add new qemu monitor interactions'
016/20:[0123] [FC] 'backup: qemu: Implement metadata tracking for checkpoint APIs'
017/20:[down] 'wip: backup: Wire up qemu checkpoint commands over QMP'
018/20:[0072] [FC] 'wip: backup: qemu: Implement framework for backup job APIs'
019/20:[down] 'backup: Wire up qemu full pull backup commands over QMP'
020/20:[down] 'backup: implement qemu incremental pull backup'
No direct dependency on this one, but included in my git tag:
https://www.redhat.com/archives/libvir-list/2018-October/msg00899.html
Eric Blake (20):
snapshots: Avoid term 'checkpoint' for full system snapshot
domain_conf: Expose virDomainStorageNetworkParseHost
qemu: Allow optional export name during NBD export
backup: Document nuances between different state capture APIs
backup: Introduce virDomainCheckpointPtr
backup: Document new XML for backups
backup: Introduce virDomainCheckpoint APIs
backup: Introduce virDomainBackup APIs
backup: Add new domain:checkpoint access control
backup: Implement backup APIs for remote driver
wip: backup: Parse and output checkpoint XML
wip: backup: Parse and output backup XML
backup: Implement virsh support for checkpoints
wip: backup: virsh support for backup
backup: Add new qemu monitor interactions
backup: qemu: Implement metadata tracking for checkpoint APIs
wip: backup: Wire up qemu checkpoint commands over QMP
wip: backup: qemu: Implement framework for backup job APIs
backup: Wire up qemu full pull backup commands over QMP
backup: implement qemu incremental pull backup
include/libvirt/virterror.h | 6 +-
src/util/virerror.c | 21 +-
include/libvirt/libvirt-domain-checkpoint.h | 177 ++
include/libvirt/libvirt-domain-snapshot.h | 2 +-
include/libvirt/libvirt-domain.h | 17 +-
include/libvirt/libvirt.h | 3 +-
src/access/viraccessperm.h | 8 +-
src/conf/checkpoint_conf.h | 218 +++
src/conf/domain_conf.h | 16 +-
src/datatypes.h | 31 +-
src/driver-hypervisor.h | 74 +-
src/qemu/qemu_conf.h | 2 +
src/qemu/qemu_domain.h | 29 +-
src/qemu/qemu_monitor.h | 17 +
src/qemu/qemu_monitor_json.h | 19 +
tools/virsh-checkpoint.h | 29 +
tools/virsh-completer.h | 4 +
tools/virsh-util.h | 3 +
tools/virsh.h | 1 +
docs/Makefile.am | 3 +
docs/apibuild.py | 2 +
docs/docs.html.in | 9 +-
docs/domainstatecapture.html.in | 314 ++++
docs/format.html.in | 1 +
docs/formatcheckpoint.html.in | 291 ++++
docs/formatsnapshot.html.in | 33 +-
docs/index.html.in | 3 +-
docs/schemas/domainbackup.rng | 185 ++
docs/schemas/domaincheckpoint.rng | 94 ++
examples/object-events/event-test.c | 3 +
libvirt.spec.in | 3 +
mingw-libvirt.spec.in | 6 +
po/POTFILES | 3 +
src/Makefile.am | 2 +
src/access/viraccessperm.c | 5 +-
src/conf/Makefile.inc.am | 2 +
src/conf/checkpoint_conf.c | 1541 +++++++++++++++++
src/conf/domain_conf.c | 52 +-
src/conf/snapshot_conf.c | 4 +-
src/datatypes.c | 62 +-
src/libvirt-domain-checkpoint.c | 925 ++++++++++
src/libvirt-domain-snapshot.c | 7 +-
src/libvirt-domain.c | 8 +-
src/libvirt_private.syms | 30 +
src/libvirt_public.syms | 23 +
src/qemu/qemu_conf.c | 5 +
src/qemu/qemu_domain.c | 205 ++-
src/qemu/qemu_driver.c | 1494 ++++++++++++++++-
src/qemu/qemu_migration.c | 2 +-
src/qemu/qemu_monitor.c | 73 +-
src/qemu/qemu_monitor_json.c | 217 +++
src/qemu/qemu_process.c | 7 +
src/remote/remote_daemon_dispatch.c | 15 +
src/remote/remote_driver.c | 33 +-
src/remote/remote_protocol.x | 239 ++-
src/remote_protocol-structs | 129 ++
src/rpc/gendispatch.pl | 32 +-
tests/Makefile.am | 15 +-
tests/domainbackupxml2xmlin/backup-pull.xml | 9 +
tests/domainbackupxml2xmlin/backup-push.xml | 9 +
tests/domainbackupxml2xmlin/empty.xml | 1 +
tests/domainbackupxml2xmlout/backup-pull.xml | 9 +
tests/domainbackupxml2xmlout/backup-push.xml | 9 +
tests/domainbackupxml2xmlout/empty.xml | 7 +
tests/domaincheckpointxml2xmlin/empty.xml | 1 +
tests/domaincheckpointxml2xmlin/sample.xml | 7 +
tests/domaincheckpointxml2xmlout/empty.xml | 10 +
tests/domaincheckpointxml2xmlout/sample.xml | 16 +
tests/domaincheckpointxml2xmltest.c | 231 +++
tests/qemumonitorjsontest.c | 2 +-
tests/virschematest.c | 4 +
tools/Makefile.am | 3 +-
tools/virsh-checkpoint.c | 1578 ++++++++++++++++++
tools/virsh-completer.c | 52 +-
tools/virsh-domain.c | 6 +-
tools/virsh-snapshot.c | 2 +-
tools/virsh-util.c | 11 +
tools/virsh.c | 2 +
tools/virsh.pod | 14 +-
79 files changed, 8619 insertions(+), 118 deletions(-)
create mode 100644 include/libvirt/libvirt-domain-checkpoint.h
create mode 100644 src/conf/checkpoint_conf.h
create mode 100644 tools/virsh-checkpoint.h
create mode 100644 docs/domainstatecapture.html.in
create mode 100644 docs/formatcheckpoint.html.in
create mode 100644 docs/schemas/domainbackup.rng
create mode 100644 docs/schemas/domaincheckpoint.rng
create mode 100644 src/conf/checkpoint_conf.c
create mode 100644 src/libvirt-domain-checkpoint.c
create mode 100644 tests/domainbackupxml2xmlin/backup-pull.xml
create mode 100644 tests/domainbackupxml2xmlin/backup-push.xml
create mode 100644 tests/domainbackupxml2xmlin/empty.xml
create mode 100644 tests/domainbackupxml2xmlout/backup-pull.xml
create mode 100644 tests/domainbackupxml2xmlout/backup-push.xml
create mode 100644 tests/domainbackupxml2xmlout/empty.xml
create mode 100644 tests/domaincheckpointxml2xmlin/empty.xml
create mode 100644 tests/domaincheckpointxml2xmlin/sample.xml
create mode 100644 tests/domaincheckpointxml2xmlout/empty.xml
create mode 100644 tests/domaincheckpointxml2xmlout/sample.xml
create mode 100644 tests/domaincheckpointxml2xmltest.c
create mode 100644 tools/virsh-checkpoint.c
--
2.17.2
6 years
[libvirt] [PATCH] qemu: Fix debug message in qemuProcessHandleResume
by Jiri Denemark
The message talks about "resumed" state, which is a bit confusing. While
we have a "resumed" event, the corresponding state is called "running".
Signed-off-by: Jiri Denemark <jdenemar(a)redhat.com>
---
src/qemu/qemu_process.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index 59ca7cd333..4e93b2d741 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -721,7 +721,7 @@ qemuProcessHandleResume(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
if (virDomainObjGetState(vm, NULL) != VIR_DOMAIN_RUNNING) {
eventDetail = qemuDomainRunningReasonToResumeEvent(reason);
- VIR_DEBUG("Transitioned guest %s out of paused into resumed state, "
+ VIR_DEBUG("Transitioned guest %s out of paused into running state, "
"reason '%s', event detail %d",
vm->def->name, virDomainRunningReasonTypeToString(reason),
eventDetail);
--
2.19.1
6 years