Devel
Threads by month
- ----- 2026 -----
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- 41 participants
- 40210 discussions
[libvirt] [PATCH] rpm: set wireshark plugin directory from pkg-config
by Daniel P. Berrangé 03 May '18
by Daniel P. Berrangé 03 May '18
03 May '18
The wireshark plugin directory moved again in Fedora 29, and will
move again every time wireshark do a new minor release. Call out
to pkg-config to find the right directory to use in the RPM file
list.
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
---
Pushed as a rawhide build fix
libvirt.spec.in | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/libvirt.spec.in b/libvirt.spec.in
index 549efcbd3a..d6058f8054 100644
--- a/libvirt.spec.in
+++ b/libvirt.spec.in
@@ -184,6 +184,11 @@
%if 0%{?fedora}
%define with_wireshark 0%{!?_without_wireshark:1}
%endif
+%if 0%{?fedora} || 0%{?rhel} > 7
+ %define wireshark_plugindir %(pkg-config --variable plugindir wireshark)
+%else
+ %define wireshark_plugindir %{_libdir}/wireshark/plugins
+%endif
# Enable libssh transport for new enough distros
%if 0%{?fedora}
@@ -1386,7 +1391,7 @@ rm -f $RPM_BUILD_ROOT%{_libdir}/libvirt/connection-driver/*.a
rm -f $RPM_BUILD_ROOT%{_libdir}/libvirt/storage-backend/*.la
rm -f $RPM_BUILD_ROOT%{_libdir}/libvirt/storage-backend/*.a
%if %{with_wireshark}
-rm -f $RPM_BUILD_ROOT%{_libdir}/wireshark/plugins/libvirt.la
+rm -f $RPM_BUILD_ROOT%{wireshark_plugindir}/libvirt.la
%endif
install -d -m 0755 $RPM_BUILD_ROOT%{_datadir}/lib/libvirt/dnsmasq/
@@ -2097,7 +2102,7 @@ exit 0
%if %{with_wireshark}
%files wireshark
-%{_libdir}/wireshark/plugins/libvirt.so
+%{wireshark_plugindir}/libvirt.so
%endif
%files nss
--
2.14.3
1
0
Hi all,
As a quick introduction, I'm Ramy Elkest, a student at Georgia Tech and
one of the lucky ones selected by libvirt for this year's Google Summer
of Code.
During the next months I'll be working with my mentors Martin Kletzander
and Erik Skultety to introduce nodejs to libvirt's family of bindings.
In short, the aim is to generate the nodejs bindings from the XMLs (as we
do for python).
On a very high level my current approach is as follows:
- Re-use libvirt-python's generator (mainly the parser) possibly re-written
in node (TBD)
- Draw from existing projects (eg. node-libvirt) to generate preliminary
templates
There are a few things to look into before jumping in:
- Code generation framework (or lack of)
- Node Abstractions for Node (NAN) vs. Node-API (N-API)
If you have preliminary thoughts / background info about any of the above,
I'd love to hear it. I'm usually around on irc, "relkest".
Ramy
2
1
[libvirt] [PATCH] rpm: libvirt-daemon-driver-libxl must obsolete libvirt-daemon-driver-xen
by Daniel P. Berrangé 03 May '18
by Daniel P. Berrangé 03 May '18
03 May '18
Snce the xen driver was deleted we need to ensure that the old
libvirt-daemon-driver-xen sub-RPM gets removed on upgrade. We
achieve this my making libvirt-daemon-driver-libxl obsolete it.
We don't add a Provides: too, because libvirt-daemon-driver-libxl
is not a functionally identical replacement, since we don't want
to satisfy deps for 3rd party apps that have a Requires on the
libvirt-daemon-driver-xen RPM.
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
---
Pushed as trivial fix
libvirt.spec.in | 1 +
1 file changed, 1 insertion(+)
diff --git a/libvirt.spec.in b/libvirt.spec.in
index 5090dfa2aa..549efcbd3a 100644
--- a/libvirt.spec.in
+++ b/libvirt.spec.in
@@ -841,6 +841,7 @@ VirtualBox
Summary: Libxl driver plugin for the libvirtd daemon
Group: Development/Libraries
Requires: libvirt-daemon = %{version}-%{release}
+Obsoletes: libvirt-daemon-driver-xen < 4.3.0
%description daemon-driver-libxl
The Libxl driver plugin for the libvirtd daemon, providing
--
2.14.3
1
0
---
docs/aclpolkit.html.in | 2 +-
docs/api.html.in | 2 +-
docs/contribute.html.in | 2 +-
docs/downloads.html.in | 2 +-
docs/drvbhyve.html.in | 2 +-
docs/drvesx.html.in | 2 +-
docs/drvlxc.html.in | 2 +-
docs/errors.html.in | 2 +-
docs/firewall.html.in | 2 +-
docs/formatdomain.html.in | 12 ++++++------
docs/formatdomaincaps.html.in | 2 +-
docs/internals/rpc.html.in | 2 +-
docs/locking-sanlock.html.in | 2 +-
docs/news.xml | 2 +-
docs/storage.html.in | 2 +-
docs/support.html.in | 2 +-
16 files changed, 21 insertions(+), 21 deletions(-)
diff --git a/docs/aclpolkit.html.in b/docs/aclpolkit.html.in
index 0e3c8e9..98d06da 100644
--- a/docs/aclpolkit.html.in
+++ b/docs/aclpolkit.html.in
@@ -396,7 +396,7 @@ polkit.addRule(function(action, subject) {
To achieve this we need to write a rule which checks
whether the <code>connect_driver</code> attribute
is <code>LXC</code> and the <code>domain_name</code>
- attribute is <code>demo</code>, and match on a action
+ attribute is <code>demo</code>, and match on action
name of <code>org.libvirt.api.domain.getattr</code>. Using
the javascript rules format, this ends up written as
</p>
diff --git a/docs/api.html.in b/docs/api.html.in
index 27abed6..288b9ec 100644
--- a/docs/api.html.in
+++ b/docs/api.html.in
@@ -155,7 +155,7 @@
</ul>
</li>
<li><b>Enumeration</b> [virConnectList..., virConnectNumOf...]
- <p>Used to enumerate a set of object available to an given
+ <p>Used to enumerate a set of object available to a given
hypervisor connection such as:</p>
<ul>
<li>
diff --git a/docs/contribute.html.in b/docs/contribute.html.in
index 158c91c..42a1b2f 100644
--- a/docs/contribute.html.in
+++ b/docs/contribute.html.in
@@ -80,7 +80,7 @@
and future growth of the project, that there are a people
who evangalise the work created by the project. This can
take many forms, writing blog posts (about usage of features,
- personal user experiances, areas for future work, and more),
+ personal user experiences, areas for future work, and more),
syndicating docs and blogs via social media, giving user
group and/or conference talks about libvirt.</li>
<li><strong>User assistance</strong>. Since documentation
diff --git a/docs/downloads.html.in b/docs/downloads.html.in
index 8cca203..2956a4f 100644
--- a/docs/downloads.html.in
+++ b/docs/downloads.html.in
@@ -457,7 +457,7 @@
(first release in the middle of Jan, then skip the Feb release), giving
a total of 11 releases a year. The Python and Perl modules will aim to
release at the same time as the core libvirt module. Other modules have
- independant ad-hoc releases with no fixed time schedle.
+ independent ad-hoc releases with no fixed time schedule.
</p>
<h2><a id="numbering">Release numbering</a></h2>
diff --git a/docs/drvbhyve.html.in b/docs/drvbhyve.html.in
index 63260af..bde8298 100644
--- a/docs/drvbhyve.html.in
+++ b/docs/drvbhyve.html.in
@@ -239,7 +239,7 @@ to let a guest boot or start a guest using:</p>
<pre>start --console domname</pre>
-<p><b>NB:</b> An bootloader configured to require user interaction will prevent
+<p><b>NB:</b> A bootloader configured to require user interaction will prevent
the domain from starting (and thus <code>virsh console</code> or <code>start
--console</code> from functioning) until the user interacts with it manually on
the VM host. Because users typically do not have access to the VM host,
diff --git a/docs/drvesx.html.in b/docs/drvesx.html.in
index 417aca4..901d659 100644
--- a/docs/drvesx.html.in
+++ b/docs/drvesx.html.in
@@ -437,7 +437,7 @@ ethernet0.checkMACAddress = "false"
<dl>
<dt><code>auto</code></dt>
<dd>
- This isn't a actual controller model. If specified the ESX driver
+ This isn't an actual controller model. If specified the ESX driver
tries to detect the SCSI controller model referenced in the
<code>.vmdk</code> file and use it. Autodetection fails when a
SCSI controller has multiple disks attached and the SCSI controller
diff --git a/docs/drvlxc.html.in b/docs/drvlxc.html.in
index 44c4960..6ee9ee8 100644
--- a/docs/drvlxc.html.in
+++ b/docs/drvlxc.html.in
@@ -429,7 +429,7 @@ be considered secure against exploits of the host OS. The sVirt SELinux
driver provides a way to secure containers even when the "user" namespace
is not used. The cost is that writing a policy to allow execution of
arbitrary OS is not practical. The SELinux sVirt policy is typically
-tailored to work with an simpler application confinement use case,
+tailored to work with a simpler application confinement use case,
as provided by the "libvirt-sandbox" project.
</p>
diff --git a/docs/errors.html.in b/docs/errors.html.in
index 8f4f7d4..ea42728 100644
--- a/docs/errors.html.in
+++ b/docs/errors.html.in
@@ -29,7 +29,7 @@ set specifically to a connection with</p>
call it with the error information</li><li>otherwise call <a href="html/libvirt-virterror.html#virDefaultErrorFunc">virDefaultErrorFunc</a>
which is the default error function of the library issuing the error
on stderr</li><li>save the error in the connection for later retrieval with <a href="html/libvirt-virterror.html#virConnGetLastError">virConnGetLastError</a></li></ol></li>
- <li>otherwise like when failing to create an hypervisor connection:
+ <li>otherwise like when failing to create a hypervisor connection:
<ol><li>if there is a global callback set with <a href="html/libvirt-virterror.html#virSetErrorFunc">virSetErrorFunc</a>,
call it with the error information</li><li>otherwise call <a href="html/libvirt-virterror.html#virDefaultErrorFunc">virDefaultErrorFunc</a>
which is the default error function of the library issuing the error
diff --git a/docs/firewall.html.in b/docs/firewall.html.in
index 11c3c81..0a50687 100644
--- a/docs/firewall.html.in
+++ b/docs/firewall.html.in
@@ -11,7 +11,7 @@
<ul>
<li>The virtual network driver
<br /><br />
- This provides a isolated bridge device (ie no physical NICs
+ This provides an isolated bridge device (ie no physical NICs
enslaved). Guest TAP devices are attached to this bridge.
Guests can talk to each other and the host, and optionally the
wider world.
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
index 8e864f7..b65fea0 100644
--- a/docs/formatdomain.html.in
+++ b/docs/formatdomain.html.in
@@ -622,7 +622,7 @@
<code>order</code> allows to specify the order to add the online vcpus.
For hypervisors/platforms that require to insert multiple vcpus at once
- the order may be duplicated accross all vcpus that need to be
+ the order may be duplicated across all vcpus that need to be
enabled at once. Specifying order is not necessary, vcpus are then
added in an arbitrary order. If order info is used, it must be used for
all online vcpus. Hypervisors may clear or update ordering information
@@ -4058,7 +4058,7 @@
pcie-switch-upstream-port, and of course for this to work
properly, you will need to decrease the pcie-expander-bus'
busNr accordingly so that there are enough unused bus
- numbers above it to accomodate giving out one bus number for
+ numbers above it to accommodate giving out one bus number for
the upstream-port and one for each downstream-port (in
addition to the pcie-root-port and the pcie-expander-bus
itself).
@@ -4212,7 +4212,7 @@
<dd>This is the fully qualified path of the file associated
with the lockspace. The offset specifies where the lease
is stored within the file. If the lock manager does not
- require a offset, just pass 0.
+ require an offset, just pass 0.
</dd>
</dl>
@@ -4867,7 +4867,7 @@
(<span class="since">Since 0.10.0</span>). For example, in order
to work properly with both an 802.1Qbh switch and an Open vSwitch
switch, you may choose to specify no type, but both
- an <code>profileid</code> (in case the switch is 802.1Qbh) and
+ a <code>profileid</code> (in case the switch is 802.1Qbh) and
an <code>interfaceid</code> (in case the switch is Open vSwitch)
(you may also omit the other attributes, such as managerid,
typeid, or profileid, to be filled in from the
@@ -6174,7 +6174,7 @@ qemu-kvm -net nic,model=? /dev/null
set to an empty string, then VNC access is disabled. The
<code>keymap</code> attribute specifies the keymap to use. It is
possible to set a limit on the validity of the password by giving
- an timestamp <code>passwdValidTo='2010-04-09T15:51:00'</code>
+ a timestamp <code>passwdValidTo='2010-04-09T15:51:00'</code>
assumed to be in UTC. The <code>connected</code> attribute allows
control of connected client during password changes. VNC accepts
<code>keep</code> value only <span class="since">since 0.9.3</span>.
@@ -6216,7 +6216,7 @@ qemu-kvm -net nic,model=? /dev/null
<code>passwd</code> attribute is set to an empty string, then
SPICE access is disabled. The <code>keymap</code> attribute
specifies the keymap to use. It is possible to set a limit on
- the validity of the password by giving an timestamp
+ the validity of the password by giving a timestamp
<code>passwdValidTo='2010-04-09T15:51:00'</code> assumed to be
in UTC.
</p>
diff --git a/docs/formatdomaincaps.html.in b/docs/formatdomaincaps.html.in
index 6bfcaf6..027e115 100644
--- a/docs/formatdomaincaps.html.in
+++ b/docs/formatdomaincaps.html.in
@@ -81,7 +81,7 @@
<h3><a id="elementsCPUAllocation">CPU Allocation</a></h3>
- <p>Before any devices capability occurs, there might be a info on domain
+ <p>Before any devices capability occurs, there might be info on domain
wide capabilities, e.g. virtual CPUs:</p>
<pre>
diff --git a/docs/internals/rpc.html.in b/docs/internals/rpc.html.in
index fca9cb7..048192f 100644
--- a/docs/internals/rpc.html.in
+++ b/docs/internals/rpc.html.in
@@ -133,7 +133,7 @@
</dd>
<dt><code>serial</code></dt>
<dd>
- This is an number that starts from 1 and increases
+ This is a number that starts from 1 and increases
each time a method call packet is sent. A reply or
stream packet will have a serial number matching the
original method call packet serial. Events always
diff --git a/docs/locking-sanlock.html.in b/docs/locking-sanlock.html.in
index 9b36561..3ee9849 100644
--- a/docs/locking-sanlock.html.in
+++ b/docs/locking-sanlock.html.in
@@ -76,7 +76,7 @@ SANLOCKOPTS="-w 0"
configuration file for each libvirt driver that is using
sanlock. For QEMU, we will edit <code>/etc/libvirt/qemu-sanlock.conf</code>
There is one mandatory parameter that needs to be set,
- the <code>host_id</code>. This is a integer between
+ the <code>host_id</code>. This is an integer between
1 and 2000, which must be set to a <strong>unique</strong>
value on each host running virtual machines.
</p>
diff --git a/docs/news.xml b/docs/news.xml
index d67d5a7..8018141 100644
--- a/docs/news.xml
+++ b/docs/news.xml
@@ -1206,7 +1206,7 @@
<description>
The <code>vgaconf</code> attribute was added to <code>video</code>'s
<code>driver</code> element. Possible values are: <code>on</code>,
- <code>off</code>, and <code>io</code>. It controlls the way how
+ <code>off</code>, and <code>io</code>. It controls the way how
bhyve exposes video devices to its guests; various guest OSes might
require different settings to boot properly.
</description>
diff --git a/docs/storage.html.in b/docs/storage.html.in
index 3f1aec1..1906aa6 100644
--- a/docs/storage.html.in
+++ b/docs/storage.html.in
@@ -759,7 +759,7 @@
This provides a pool based on Virtuozzo storage. Virtuozzo Storage is
a highly available distributed software-defined storage with built-in
replication and disaster recovery. More detailed information about
- Virtuozzo storage and its managment can be found here:
+ Virtuozzo storage and its management can be found here:
<a href="https://openvz.org/Virtuozzo_Storage">Virtuozzo Storage</a>).
</p>
diff --git a/docs/support.html.in b/docs/support.html.in
index 1a9438f..38f2f90 100644
--- a/docs/support.html.in
+++ b/docs/support.html.in
@@ -199,7 +199,7 @@
return an error indicating it is not supported. Likewise libvirt will
make reasonable efforts to keep API calls working across hypervisor
releases even if the underlying implementation changes. In cases where
- this is impossible, an suitable error will be reported. The list of
+ this is impossible, a suitable error will be reported. The list of
APIs which have implementations <a href="hvsupport.html">is detailed separately</a>.
</p>
--
2.14.1
2
1
[libvirt] [PATCH v2 REBASE] lib: provide error message in new blockjob event
by Nikolay Shirokovskiy 03 May '18
by Nikolay Shirokovskiy 03 May '18
03 May '18
If block job is completed with error qemu additionally
provides error message. This patch introduces new event
VIR_DOMAIN_EVENT_ID_BLOCK_JOB_ERROR to pass error message to client.
This error message has no semantics and should not be interpreted.
API and RPC layer also have reserved 'code' field to pass semantics
loaded error code value in the future.
Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy(a)virtuozzo.com>
---
Diff from v1 [1]:
- replace block job event version 3 with block job error event
- add code field to API/RPC to pass error code in the future
Peter, I decided not to use enum/union as this looks like to much effort to extend
code generation for this simple case. Using typed params looks unsuitable too.
[1] https://www.redhat.com/archives/libvir-list/2017-October/msg01369.html
examples/object-events/event-test.c | 20 ++++++++
include/libvirt/libvirt-domain.h | 25 ++++++++++
src/conf/domain_event.c | 92 +++++++++++++++++++++++++++++++++++++
src/conf/domain_event.h | 13 ++++++
src/libvirt_private.syms | 2 +
src/qemu/qemu_blockjob.c | 10 +++-
src/qemu/qemu_blockjob.h | 3 +-
src/qemu/qemu_domain.c | 4 +-
src/qemu/qemu_domain.h | 1 +
src/qemu/qemu_driver.c | 9 ++--
src/qemu/qemu_process.c | 1 +
src/remote/remote_daemon_dispatch.c | 48 +++++++++++++++++++
src/remote/remote_driver.c | 34 ++++++++++++++
src/remote/remote_protocol.x | 17 ++++++-
src/remote_protocol-structs | 9 ++++
tools/virsh-domain.c | 24 ++++++++++
16 files changed, 304 insertions(+), 8 deletions(-)
diff --git a/examples/object-events/event-test.c b/examples/object-events/event-test.c
index 8499e0b..23d5a3f 100644
--- a/examples/object-events/event-test.c
+++ b/examples/object-events/event-test.c
@@ -936,6 +936,25 @@ myDomainEventBlockJobCallback(virConnectPtr conn ATTRIBUTE_UNUSED,
static int
+myDomainEventBlockJobErrorCallback(virConnectPtr conn ATTRIBUTE_UNUSED,
+ virDomainPtr dom,
+ const char *dev,
+ int type,
+ unsigned int code,
+ const char *message,
+ void *opaque)
+{
+ const char *eventName = opaque;
+
+ printf("%s EVENT: Domain %s(%d) block job error callback '%s' disk '%s', "
+ "type '%s' code '%u' message '%s'",
+ __func__, virDomainGetName(dom), virDomainGetID(dom), eventName,
+ dev, blockJobTypeToStr(type), code, NULLSTR(message));
+ return 0;
+}
+
+
+static int
myDomainEventBlockThresholdCallback(virConnectPtr conn ATTRIBUTE_UNUSED,
virDomainPtr dom,
const char *dev,
@@ -1082,6 +1101,7 @@ struct domainEventData domainEvents[] = {
DOMAIN_EVENT(VIR_DOMAIN_EVENT_ID_DEVICE_REMOVAL_FAILED, myDomainEventDeviceRemovalFailedCallback),
DOMAIN_EVENT(VIR_DOMAIN_EVENT_ID_METADATA_CHANGE, myDomainEventMetadataChangeCallback),
DOMAIN_EVENT(VIR_DOMAIN_EVENT_ID_BLOCK_THRESHOLD, myDomainEventBlockThresholdCallback),
+ DOMAIN_EVENT(VIR_DOMAIN_EVENT_ID_BLOCK_JOB_ERROR, myDomainEventBlockJobErrorCallback),
};
struct storagePoolEventData {
diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-domain.h
index 12fd340..ee55ab9 100644
--- a/include/libvirt/libvirt-domain.h
+++ b/include/libvirt/libvirt-domain.h
@@ -4370,6 +4370,30 @@ typedef void (*virConnectDomainEventBlockThresholdCallback)(virConnectPtr conn,
unsigned long long excess,
void *opaque);
+
+/**
+ * virConnectDomainEventBlockJobErrorCallback:
+ * @conn: connection object
+ * @dom: domain on which the event occurred
+ * @dev: name associated with the affected disk or storage backing chain
+ * element
+ * @type: type of block job (virDomainBlockJobType)
+ * @code: always 0, reserved for future use
+ * @message: error message with no semantics, can be NULL
+ * @opaque: application specified data
+ *
+ * The callback occurs when block job is completed with error and provides
+ * error message in @message.
+ *
+ */
+typedef void (*virConnectDomainEventBlockJobErrorCallback)(virConnectPtr conn,
+ virDomainPtr dom,
+ const char *dev,
+ int type,
+ unsigned int code,
+ const char *message,
+ void *opaque);
+
/**
* VIR_DOMAIN_EVENT_CALLBACK:
*
@@ -4412,6 +4436,7 @@ typedef enum {
VIR_DOMAIN_EVENT_ID_DEVICE_REMOVAL_FAILED = 22, /* virConnectDomainEventDeviceRemovalFailedCallback */
VIR_DOMAIN_EVENT_ID_METADATA_CHANGE = 23, /* virConnectDomainEventMetadataChangeCallback */
VIR_DOMAIN_EVENT_ID_BLOCK_THRESHOLD = 24, /* virConnectDomainEventBlockThresholdCallback */
+ VIR_DOMAIN_EVENT_ID_BLOCK_JOB_ERROR = 25, /* virConnectDomainEventBlockJobErrorCallback */
# ifdef VIR_ENUM_SENTINELS
VIR_DOMAIN_EVENT_ID_LAST
diff --git a/src/conf/domain_event.c b/src/conf/domain_event.c
index 9752070..54f4cf4 100644
--- a/src/conf/domain_event.c
+++ b/src/conf/domain_event.c
@@ -47,6 +47,7 @@ static virClassPtr virDomainEventWatchdogClass;
static virClassPtr virDomainEventIOErrorClass;
static virClassPtr virDomainEventGraphicsClass;
static virClassPtr virDomainEventBlockJobClass;
+static virClassPtr virDomainEventBlockJobErrorClass;
static virClassPtr virDomainEventDiskChangeClass;
static virClassPtr virDomainEventTrayChangeClass;
static virClassPtr virDomainEventBalloonChangeClass;
@@ -69,6 +70,7 @@ static void virDomainEventWatchdogDispose(void *obj);
static void virDomainEventIOErrorDispose(void *obj);
static void virDomainEventGraphicsDispose(void *obj);
static void virDomainEventBlockJobDispose(void *obj);
+static void virDomainEventBlockJobErrorDispose(void *obj);
static void virDomainEventDiskChangeDispose(void *obj);
static void virDomainEventTrayChangeDispose(void *obj);
static void virDomainEventBalloonChangeDispose(void *obj);
@@ -151,6 +153,17 @@ struct _virDomainEventBlockJob {
typedef struct _virDomainEventBlockJob virDomainEventBlockJob;
typedef virDomainEventBlockJob *virDomainEventBlockJobPtr;
+struct _virDomainEventBlockJobError {
+ virDomainEvent parent;
+
+ char *dev;
+ int type;
+ unsigned int code;
+ char *message;
+};
+typedef struct _virDomainEventBlockJobError virDomainEventBlockJobError;
+typedef virDomainEventBlockJobError *virDomainEventBlockJobErrorPtr;
+
struct _virDomainEventGraphics {
virDomainEvent parent;
@@ -309,6 +322,8 @@ virDomainEventsOnceInit(void)
return -1;
if (!VIR_CLASS_NEW(virDomainEventBlockJob, virDomainEventClass))
return -1;
+ if (!VIR_CLASS_NEW(virDomainEventBlockJobError, virDomainEventClass))
+ return -1;
if (!VIR_CLASS_NEW(virDomainEventDiskChange, virDomainEventClass))
return -1;
if (!VIR_CLASS_NEW(virDomainEventTrayChange, virDomainEventClass))
@@ -420,6 +435,16 @@ virDomainEventBlockJobDispose(void *obj)
}
static void
+virDomainEventBlockJobErrorDispose(void *obj)
+{
+ virDomainEventBlockJobErrorPtr event = obj;
+ VIR_DEBUG("obj=%p", event);
+
+ VIR_FREE(event->dev);
+ VIR_FREE(event->message);
+}
+
+static void
virDomainEventDiskChangeDispose(void *obj)
{
virDomainEventDiskChangePtr event = obj;
@@ -977,6 +1002,59 @@ virDomainEventBlockJob2NewFromDom(virDomainPtr dom,
dst, type, status);
}
+static virObjectEventPtr
+virDomainEventBlockJobErrorNew(int id,
+ const char *name,
+ unsigned char *uuid,
+ const char *dev,
+ int type,
+ unsigned int code,
+ const char *message)
+{
+ virDomainEventBlockJobErrorPtr ev;
+
+ if (virDomainEventsInitialize() < 0)
+ return NULL;
+
+ if (!(ev = virDomainEventNew(virDomainEventBlockJobErrorClass,
+ VIR_DOMAIN_EVENT_ID_BLOCK_JOB_ERROR,
+ id, name, uuid)))
+ return NULL;
+
+ if (VIR_STRDUP(ev->dev, dev) < 0) {
+ virObjectUnref(ev);
+ return NULL;
+ }
+ ignore_value(VIR_STRDUP_QUIET(ev->message, message));
+ ev->type = type;
+ ev->code = code;
+
+ return (virObjectEventPtr)ev;
+}
+
+virObjectEventPtr
+virDomainEventBlockJobErrorNewFromObj(virDomainObjPtr obj,
+ const char *dev,
+ int type,
+ unsigned int code,
+ const char *message)
+{
+ return virDomainEventBlockJobErrorNew(obj->def->id, obj->def->name,
+ obj->def->uuid, dev, type, code,
+ message);
+}
+
+virObjectEventPtr
+virDomainEventBlockJobErrorNewFromDom(virDomainPtr dom,
+ const char *dev,
+ int type,
+ unsigned int code,
+ const char *message)
+{
+ return virDomainEventBlockJobErrorNew(dom->id, dom->name, dom->uuid,
+ dev, type, code, message);
+}
+
virObjectEventPtr
virDomainEventControlErrorNewFromDom(virDomainPtr dom)
{
@@ -1787,6 +1865,20 @@ virDomainEventDispatchDefaultFunc(virConnectPtr conn,
goto cleanup;
}
+ case VIR_DOMAIN_EVENT_ID_BLOCK_JOB_ERROR:
+ {
+ virDomainEventBlockJobErrorPtr blockJobErrorEvent;
+
+ blockJobErrorEvent = (virDomainEventBlockJobErrorPtr)event;
+ ((virConnectDomainEventBlockJobErrorCallback)cb)(conn, dom,
+ blockJobErrorEvent->dev,
+ blockJobErrorEvent->type,
+ blockJobErrorEvent->code,
+ blockJobErrorEvent->message,
+ cbopaque);
+ goto cleanup;
+ }
+
case VIR_DOMAIN_EVENT_ID_DISK_CHANGE:
{
virDomainEventDiskChangePtr diskChangeEvent;
diff --git a/src/conf/domain_event.h b/src/conf/domain_event.h
index 3992a29..456026c 100644
--- a/src/conf/domain_event.h
+++ b/src/conf/domain_event.h
@@ -138,6 +138,19 @@ virDomainEventBlockJob2NewFromDom(virDomainPtr dom,
int status);
virObjectEventPtr
+virDomainEventBlockJobErrorNewFromObj(virDomainObjPtr obj,
+ const char *dev,
+ int type,
+ unsigned int code,
+ const char *message);
+virObjectEventPtr
+virDomainEventBlockJobErrorNewFromDom(virDomainPtr dom,
+ const char *dev,
+ int type,
+ unsigned int code,
+ const char *message);
+
+virObjectEventPtr
virDomainEventDiskChangeNewFromObj(virDomainObjPtr obj,
const char *oldSrcPath,
const char *newSrcPath,
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index b31f599..303f28c 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -589,6 +589,8 @@ virDomainEventBalloonChangeNewFromDom;
virDomainEventBalloonChangeNewFromObj;
virDomainEventBlockJob2NewFromDom;
virDomainEventBlockJob2NewFromObj;
+virDomainEventBlockJobErrorNewFromDom;
+virDomainEventBlockJobErrorNewFromObj;
virDomainEventBlockJobNewFromDom;
virDomainEventBlockJobNewFromObj;
virDomainEventBlockThresholdNewFromDom;
diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c
index 617e4ee..4df4ed6 100644
--- a/src/qemu/qemu_blockjob.c
+++ b/src/qemu/qemu_blockjob.c
@@ -70,7 +70,8 @@ qemuBlockJobUpdate(virQEMUDriverPtr driver,
if (status != -1) {
qemuBlockJobEventProcess(driver, vm, disk, asyncJob,
diskPriv->blockJobType,
- diskPriv->blockJobStatus);
+ diskPriv->blockJobStatus,
+ diskPriv->blockJobError);
diskPriv->blockJobStatus = -1;
if (error)
VIR_STEAL_PTR(*error, diskPriv->blockJobError);
@@ -100,10 +101,12 @@ qemuBlockJobEventProcess(virQEMUDriverPtr driver,
virDomainDiskDefPtr disk,
qemuDomainAsyncJob asyncJob,
int type,
- int status)
+ int status,
+ const char *error)
{
virObjectEventPtr event = NULL;
virObjectEventPtr event2 = NULL;
+ virObjectEventPtr errorEvent = NULL;
const char *path;
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
virDomainDiskDefPtr persistDisk = NULL;
@@ -123,6 +126,8 @@ qemuBlockJobEventProcess(virQEMUDriverPtr driver,
path = virDomainDiskGetSource(disk);
event = virDomainEventBlockJobNewFromObj(vm, path, type, status);
event2 = virDomainEventBlockJob2NewFromObj(vm, disk->dst, type, status);
+ if (error)
+ errorEvent = virDomainEventBlockJobErrorNewFromObj(vm, disk->dst, type, 0, error);
/* If we completed a block pull or commit, then update the XML
* to match. */
@@ -213,6 +218,7 @@ qemuBlockJobEventProcess(virQEMUDriverPtr driver,
qemuDomainEventQueue(driver, event);
qemuDomainEventQueue(driver, event2);
+ qemuDomainEventQueue(driver, errorEvent);
virObjectUnref(cfg);
}
diff --git a/src/qemu/qemu_blockjob.h b/src/qemu/qemu_blockjob.h
index e71d691..18bcaaa 100644
--- a/src/qemu/qemu_blockjob.h
+++ b/src/qemu/qemu_blockjob.h
@@ -36,7 +36,8 @@ void qemuBlockJobEventProcess(virQEMUDriverPtr driver,
virDomainDiskDefPtr disk,
qemuDomainAsyncJob asyncJob,
int type,
- int status);
+ int status,
+ const char *error);
void qemuBlockJobSyncBegin(virDomainDiskDefPtr disk);
void qemuBlockJobSyncEnd(virQEMUDriverPtr driver,
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index e2a8450..883652d 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -11951,12 +11951,14 @@ qemuProcessEventFree(struct qemuProcessEvent *event)
case QEMU_PROCESS_EVENT_GUESTPANIC:
qemuMonitorEventPanicInfoFree(event->data);
break;
+ case QEMU_PROCESS_EVENT_MONITOR_EOF:
+ VIR_FREE(event->error);
+ ATTRIBUTE_FALLTHROUGH;
case QEMU_PROCESS_EVENT_WATCHDOG:
case QEMU_PROCESS_EVENT_DEVICE_DELETED:
case QEMU_PROCESS_EVENT_NIC_RX_FILTER_CHANGED:
case QEMU_PROCESS_EVENT_SERIAL_CHANGED:
case QEMU_PROCESS_EVENT_BLOCK_JOB:
- case QEMU_PROCESS_EVENT_MONITOR_EOF:
VIR_FREE(event->data);
break;
case QEMU_PROCESS_EVENT_LAST:
diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
index 2c27dfb..f3b262f 100644
--- a/src/qemu/qemu_domain.h
+++ b/src/qemu/qemu_domain.h
@@ -456,6 +456,7 @@ struct qemuProcessEvent {
int action;
int status;
void *data;
+ char *error;
};
void qemuProcessEventFree(struct qemuProcessEvent *event);
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 5673d9f..cefbe52 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -4748,7 +4748,8 @@ processBlockJobEvent(virQEMUDriverPtr driver,
virDomainObjPtr vm,
const char *diskAlias,
int type,
- int status)
+ int status,
+ char *error)
{
virDomainDiskDefPtr disk;
@@ -4761,7 +4762,8 @@ processBlockJobEvent(virQEMUDriverPtr driver,
}
if ((disk = qemuProcessFindDomainDiskByAlias(vm, diskAlias)))
- qemuBlockJobEventProcess(driver, vm, disk, QEMU_ASYNC_JOB_NONE, type, status);
+ qemuBlockJobEventProcess(driver, vm, disk, QEMU_ASYNC_JOB_NONE,
+ type, status, error);
endjob:
qemuDomainObjEndJob(driver, vm);
@@ -4846,7 +4848,8 @@ static void qemuProcessEventHandler(void *data, void *opaque)
processBlockJobEvent(driver, vm,
processEvent->data,
processEvent->action,
- processEvent->status);
+ processEvent->status,
+ processEvent->error);
break;
case QEMU_PROCESS_EVENT_MONITOR_EOF:
processMonitorEOFEvent(driver, vm);
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index 6a5262a..12b156f 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -1026,6 +1026,7 @@ qemuProcessHandleBlockJob(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
processEvent->vm = virObjectRef(vm);
processEvent->action = type;
processEvent->status = status;
+ ignore_value(VIR_STRDUP_QUIET(processEvent->error, error));
if (virThreadPoolSendJob(driver->workerPool, 0, processEvent) < 0) {
ignore_value(virObjectUnref(vm));
diff --git a/src/remote/remote_daemon_dispatch.c b/src/remote/remote_daemon_dispatch.c
index a8a5932..07c9dbb 100644
--- a/src/remote/remote_daemon_dispatch.c
+++ b/src/remote/remote_daemon_dispatch.c
@@ -1342,6 +1342,53 @@ remoteRelayDomainEventBlockThreshold(virConnectPtr conn,
}
+static int
+remoteRelayDomainEventBlockJobError(virConnectPtr conn,
+ virDomainPtr dom,
+ const char *dev,
+ int type,
+ unsigned int code,
+ const char *message,
+ void *opaque)
+{
+ daemonClientEventCallbackPtr callback = opaque;
+ remote_domain_event_block_job_error_msg msg;
+
+ if (callback->callbackID < 0 ||
+ !remoteRelayDomainEventCheckACL(callback->client, conn, dom))
+ return -1;
+
+ VIR_DEBUG("Relaying domain block job error event %s %d %s %i %u %s, callback %d",
+ dom->name, dom->id, dev, type, code, NULLSTR(message),
+ callback->callbackID);
+
+ memset(&msg, 0, sizeof(msg));
+ msg.callbackID = callback->callbackID;
+ if (VIR_STRDUP(msg.dev, dev) < 0)
+ return -1;
+ if (message) {
+ if (VIR_ALLOC(msg.message) < 0 ||
+ VIR_STRDUP(*(msg.message), message) < 0)
+ goto error;
+ }
+ msg.type = type;
+ msg.code = code;
+ make_nonnull_domain(&msg.dom, dom);
+
+ remoteDispatchObjectEventSend(callback->client, remoteProgram,
+ REMOTE_PROC_DOMAIN_EVENT_BLOCK_JOB_ERROR,
+ (xdrproc_t)xdr_remote_domain_event_block_job_error_msg,
+ &msg);
+ return 0;
+
+ error:
+ VIR_FREE(msg.dev);
+ VIR_FREE(msg.message);
+
+ return -1;
+}
+
+
static virConnectDomainEventGenericCallback domainEventCallbacks[] = {
VIR_DOMAIN_EVENT_CALLBACK(remoteRelayDomainEventLifecycle),
VIR_DOMAIN_EVENT_CALLBACK(remoteRelayDomainEventReboot),
@@ -1368,6 +1415,7 @@ static virConnectDomainEventGenericCallback domainEventCallbacks[] = {
VIR_DOMAIN_EVENT_CALLBACK(remoteRelayDomainEventDeviceRemovalFailed),
VIR_DOMAIN_EVENT_CALLBACK(remoteRelayDomainEventMetadataChange),
VIR_DOMAIN_EVENT_CALLBACK(remoteRelayDomainEventBlockThreshold),
+ VIR_DOMAIN_EVENT_CALLBACK(remoteRelayDomainEventBlockJobError),
};
verify(ARRAY_CARDINALITY(domainEventCallbacks) == VIR_DOMAIN_EVENT_ID_LAST);
diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c
index d3b588c..0d30bf3 100644
--- a/src/remote/remote_driver.c
+++ b/src/remote/remote_driver.c
@@ -405,6 +405,11 @@ remoteConnectNotifyEventConnectionClosed(virNetClientProgramPtr prog ATTRIBUTE_U
virNetClientPtr client ATTRIBUTE_UNUSED,
void *evdata, void *opaque);
+static void
+remoteDomainBuildEventBlockJobError(virNetClientProgramPtr prog,
+ virNetClientPtr client,
+ void *evdata, void *opaque);
+
static virNetClientProgramEvent remoteEvents[] = {
{ REMOTE_PROC_DOMAIN_EVENT_LIFECYCLE,
remoteDomainBuildEventLifecycle,
@@ -611,6 +616,10 @@ static virNetClientProgramEvent remoteEvents[] = {
remoteDomainBuildEventBlockThreshold,
sizeof(remote_domain_event_block_threshold_msg),
(xdrproc_t)xdr_remote_domain_event_block_threshold_msg },
+ { REMOTE_PROC_DOMAIN_EVENT_BLOCK_JOB_ERROR,
+ remoteDomainBuildEventBlockJobError,
+ sizeof(remote_domain_event_block_job_error_msg),
+ (xdrproc_t)xdr_remote_domain_event_block_job_error_msg },
};
static void
@@ -5533,6 +5542,31 @@ remoteDomainBuildEventBlockThreshold(virNetClientProgramPtr prog ATTRIBUTE_UNUSE
}
+static void
+remoteDomainBuildEventBlockJobError(virNetClientProgramPtr prog ATTRIBUTE_UNUSED,
+ virNetClientPtr client ATTRIBUTE_UNUSED,
+ void *evdata, void *opaque)
+{
+ virConnectPtr conn = opaque;
+ remote_domain_event_block_job_error_msg *msg = evdata;
+ struct private_data *priv = conn->privateData;
+ virDomainPtr dom;
+ virObjectEventPtr event = NULL;
+
+ dom = get_nonnull_domain(conn, msg->dom);
+ if (!dom)
+ return;
+
+ event = virDomainEventBlockJobErrorNewFromDom(dom, msg->dev, msg->type,
+ msg->code,
+ msg->message ? *msg->message : NULL);
+
+ virObjectUnref(dom);
+
+ remoteEventQueue(priv, event, msg->callbackID);
+}
+
+
static int
remoteStreamSend(virStreamPtr st,
const char *data,
diff --git a/src/remote/remote_protocol.x b/src/remote/remote_protocol.x
index 296a087..051a773 100644
--- a/src/remote/remote_protocol.x
+++ b/src/remote/remote_protocol.x
@@ -3103,6 +3103,15 @@ struct remote_domain_event_block_job_2_msg {
int status;
};
+struct remote_domain_event_block_job_error_msg {
+ int callbackID;
+ remote_nonnull_domain dom;
+ remote_nonnull_string dev;
+ int type;
+ int code;
+ remote_string message;
+};
+
struct remote_domain_event_block_threshold_msg {
int callbackID;
remote_nonnull_domain dom;
@@ -6135,5 +6144,11 @@ enum remote_procedure {
* @priority: high
* @acl: storage_pool:getattr
*/
- REMOTE_PROC_STORAGE_POOL_LOOKUP_BY_TARGET_PATH = 391
+ REMOTE_PROC_STORAGE_POOL_LOOKUP_BY_TARGET_PATH = 391,
+
+ /**
+ * @generate: none
+ * @acl: none
+ */
+ REMOTE_PROC_DOMAIN_EVENT_BLOCK_JOB_ERROR = 392
};
diff --git a/src/remote_protocol-structs b/src/remote_protocol-structs
index fe163db..567f307 100644
--- a/src/remote_protocol-structs
+++ b/src/remote_protocol-structs
@@ -2541,6 +2541,14 @@ struct remote_domain_event_block_job_2_msg {
int type;
int status;
};
+struct remote_domain_event_block_job_error_msg {
+ int callbackID;
+ remote_nonnull_domain dom;
+ remote_nonnull_string dev;
+ int type;
+ int code;
+ remote_string message;
+};
struct remote_domain_event_block_threshold_msg {
int callbackID;
remote_nonnull_domain dom;
@@ -3269,4 +3277,5 @@ enum remote_procedure {
REMOTE_PROC_DOMAIN_MANAGED_SAVE_DEFINE_XML = 389,
REMOTE_PROC_DOMAIN_SET_LIFECYCLE_ACTION = 390,
REMOTE_PROC_STORAGE_POOL_LOOKUP_BY_TARGET_PATH = 391,
+ REMOTE_PROC_DOMAIN_EVENT_BLOCK_JOB_ERROR = 392,
};
diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
index 2b775fc..40d3c82 100644
--- a/tools/virsh-domain.c
+++ b/tools/virsh-domain.c
@@ -13286,6 +13286,28 @@ virshEventBlockThresholdPrint(virConnectPtr conn ATTRIBUTE_UNUSED,
}
+static void
+virshEventBlockJobErrorPrint(virConnectPtr conn ATTRIBUTE_UNUSED,
+ virDomainPtr dom,
+ const char *dev,
+ int type,
+ unsigned int code ATTRIBUTE_UNUSED,
+ const char *message,
+ void *opaque)
+{
+ virBuffer buf = VIR_BUFFER_INITIALIZER;
+
+ virBufferAsprintf(&buf, _("event '%s' for domain %s: %s for %s, "
+ "error: %s\n"),
+ ((virshDomEventData *) opaque)->cb->name,
+ virDomainGetName(dom),
+ virshDomainBlockJobToString(type),
+ dev,
+ NULLSTR(message));
+ virshEventPrint(opaque, &buf);
+}
+
+
static vshEventCallback vshEventCallbacks[] = {
{ "lifecycle",
VIR_DOMAIN_EVENT_CALLBACK(virshEventLifecyclePrint), },
@@ -13335,6 +13357,8 @@ static vshEventCallback vshEventCallbacks[] = {
VIR_DOMAIN_EVENT_CALLBACK(virshEventMetadataChangePrint), },
{ "block-threshold",
VIR_DOMAIN_EVENT_CALLBACK(virshEventBlockThresholdPrint), },
+ { "block-job-error",
+ VIR_DOMAIN_EVENT_CALLBACK(virshEventBlockJobErrorPrint), },
};
verify(VIR_DOMAIN_EVENT_ID_LAST == ARRAY_CARDINALITY(vshEventCallbacks));
--
1.8.3.1
1
1
03 May '18
Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
---
docs/news.xml | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/docs/news.xml b/docs/news.xml
index caeda159a8..af57751e0c 100644
--- a/docs/news.xml
+++ b/docs/news.xml
@@ -157,6 +157,18 @@
</change>
</section>
<section title="Bug fixes">
+ <change>
+ <summary>
+ qemu: TLS migration now enforces use of TLS for the NBD connection
+ </summary>
+ <description>
+ When the VIR_MIGRATE_TLS flag was used with the migration API libvirt
+ did not ensure that the NBD connection was using TLS as well. The code
+ now rejects such migration as the TLS transport for NBD is not ready
+ yet, but prevents a false sense of security that TLS would be used.
+ The support TLS for NBD will be added soon.
+ </description>
+ </change>
</section>
</release>
<release version="v4.1.0" date="2018-03-05">
--
2.16.2
2
3
[libvirt] [PATCH 00/35] qemu: Add formatting of JSON objects for -blockdev (blockdev-add saga)
by Peter Krempa 03 May '18
by Peter Krempa 03 May '18
03 May '18
Diff to the RFC posting:
- host_device and host_cdrom handling was added
- modified code to format and parse node-names to status XML so that we
can add other node names easier (for quorum, throttling, etc)
- added test case for host_device
Kevin, please sanity check the outputs whether they make sense. Thanks.
Peter Krempa (35):
storage: Properly track that backing chain members are readonly
qemu: domain: Format storage source node names into private data
util: storage: Add shadow copies of few disk properties to
virStorageSource
qemu: domain: Carefuly transfer configuration from disk to storage
source
qemu: block: Extract formatting of props for 'file' backend
qemu: block: Handle iomode property for json 'file' driver
utils: storage: Mark that a virStorageSource is going to be used as a
floppy
qemu: Move virtual FAT disk validation from command line builder
qemu: block: Add support for accessing directories via the 'vvfat'
driver
util: file: Use only one #ifdef for __linux__
util: file: Add helper to determine whether a path is a CDROM
qemu: domain: Store whether a virStorageSource is a host CDROM drive
qemu: block: Properly handle block storage in JSON generator
qemu: block: Propagate 'legacy' parameter when formatting disk backing
qemu: block: Validate node-names for use with qemu
qemu: block: Format cache modes for disk storage backends
qemu: block: Format 'read-only' attribute for JSON disk protocol
qemu: block: Always set discard for storage nodes
qemu: block: Add support for creating 'format' layer for blockdev-add
tests: qemublock: Rename variables in anticipation of new tests
tests: Makefile: Sanitize entry for qemublocktest
qemu: domain: Export qemuDomainDeviceDefValidateDisk
qemu: domain: Tolerate NULL 'cfg' in qemuDomainPrepareDiskSourceChain
tests: qemublock: Add testing of blockdev JSON property generator
tests: qemublock: Add basic 'raw' file test
tests: qemublock: Add tests for all other format without special
options
tests: qemublock: Add tests for basic backing chain formats
tests: qemublock: Add test-case for the 'vvfat' driver in qemu
tests: qemublock: Add test cases for 'aio' options of 'file' storage
tests: qemublock: Add test for raw luks disk format
tests: qemublock: basic qcow2 tests
tests: qemublock: Add test combining authentication and encryption
tests: qemublock: Test handling of 'unmap' and 'detect-zeroes' options
tests: qemublock: Test handling of all cache modes
tests: qemublock: Test handling of block devices
src/conf/domain_conf.c | 3 +
src/libvirt_private.syms | 1 +
src/qemu/qemu_block.c | 430 ++++++++++++++++++++-
src/qemu/qemu_block.h | 6 +-
src/qemu/qemu_command.c | 16 +-
src/qemu/qemu_domain.c | 61 ++-
src/qemu/qemu_domain.h | 3 +
src/qemu/qemu_driver.c | 3 +
src/util/virfile.c | 61 ++-
src/util/virfile.h | 2 +
src/util/virstoragefile.c | 5 +
src/util/virstoragefile.h | 13 +
tests/Makefile.am | 11 +-
tests/qemublocktest.c | 314 ++++++++++++++-
.../xml2json/block-raw-noopts.json | 12 +
.../xml2json/block-raw-noopts.xml | 12 +
.../qemublocktestdata/xml2json/dir-fat-cache.json | 22 ++
tests/qemublocktestdata/xml2json/dir-fat-cache.xml | 13 +
.../qemublocktestdata/xml2json/dir-fat-floppy.json | 14 +
.../qemublocktestdata/xml2json/dir-fat-floppy.xml | 14 +
.../xml2json/dir-fat-readonly.json | 14 +
.../xml2json/dir-fat-readonly.xml | 13 +
.../xml2json/file-backing_basic-aio_threads.json | 62 +++
.../xml2json/file-backing_basic-aio_threads.xml | 47 +++
.../file-backing_basic-cache-directsync.json | 91 +++++
.../file-backing_basic-cache-directsync.xml | 47 +++
.../xml2json/file-backing_basic-cache-none.json | 91 +++++
.../xml2json/file-backing_basic-cache-none.xml | 47 +++
.../xml2json/file-backing_basic-cache-unsafe.json | 91 +++++
.../xml2json/file-backing_basic-cache-unsafe.xml | 47 +++
.../file-backing_basic-cache-writeback.json | 91 +++++
.../file-backing_basic-cache-writeback.xml | 47 +++
.../file-backing_basic-cache-writethrough.json | 91 +++++
.../file-backing_basic-cache-writethrough.xml | 47 +++
.../xml2json/file-backing_basic-detect.json | 60 +++
.../xml2json/file-backing_basic-detect.xml | 47 +++
.../xml2json/file-backing_basic-noopts.json | 51 +++
.../xml2json/file-backing_basic-noopts.xml | 46 +++
.../xml2json/file-backing_basic-unmap-detect.json | 64 +++
.../xml2json/file-backing_basic-unmap-detect.xml | 47 +++
.../xml2json/file-backing_basic-unmap-discard.json | 0
.../xml2json/file-backing_basic-unmap-ignore.json | 64 +++
.../xml2json/file-backing_basic-unmap-ignore.xml | 47 +++
.../xml2json/file-backing_basic-unmap.json | 63 +++
.../xml2json/file-backing_basic-unmap.xml | 47 +++
.../xml2json/file-bochs-noopts.json | 12 +
.../xml2json/file-bochs-noopts.xml | 12 +
.../xml2json/file-cloop-noopts.json | 12 +
.../xml2json/file-cloop-noopts.xml | 12 +
.../xml2json/file-dmg-noopts.json | 12 +
.../qemublocktestdata/xml2json/file-dmg-noopts.xml | 12 +
.../xml2json/file-ploop-noopts.json | 12 +
.../xml2json/file-ploop-noopts.xml | 12 +
.../file-qcow2-backing-chain-encryption.json | 34 ++
.../file-qcow2-backing-chain-encryption.xml | 31 ++
.../xml2json/file-qcow2-backing-chain-noopts.json | 130 +++++++
.../xml2json/file-qcow2-backing-chain-noopts.xml | 113 ++++++
.../file-qcow2-backing-chain-unterminated.json | 25 ++
.../file-qcow2-backing-chain-unterminated.xml | 24 ++
.../xml2json/file-raw-aio_native.json | 21 +
.../xml2json/file-raw-aio_native.xml | 12 +
.../qemublocktestdata/xml2json/file-raw-luks.json | 13 +
tests/qemublocktestdata/xml2json/file-raw-luks.xml | 15 +
.../xml2json/file-raw-noopts.json | 12 +
.../qemublocktestdata/xml2json/file-raw-noopts.xml | 12 +
.../xml2json/file-vdi-noopts.json | 12 +
.../qemublocktestdata/xml2json/file-vdi-noopts.xml | 12 +
.../xml2json/file-vhd-noopts.json | 12 +
.../qemublocktestdata/xml2json/file-vhd-noopts.xml | 12 +
.../xml2json/file-vpc-noopts.json | 12 +
.../qemublocktestdata/xml2json/file-vpc-noopts.xml | 12 +
.../network-qcow2-backing-chain-cache-unsafe.json | 57 +++
.../network-qcow2-backing-chain-cache-unsafe.xml | 31 ++
...etwork-qcow2-backing-chain-encryption_auth.json | 51 +++
...network-qcow2-backing-chain-encryption_auth.xml | 40 ++
.../xml2json/nodename-long-format.xml | 12 +
.../xml2json/nodename-long-protocol.xml | 12 +
tests/qemustatusxml2xmldata/modern-in.xml | 4 +
78 files changed, 3155 insertions(+), 40 deletions(-)
create mode 100644 tests/qemublocktestdata/xml2json/block-raw-noopts.json
create mode 100644 tests/qemublocktestdata/xml2json/block-raw-noopts.xml
create mode 100644 tests/qemublocktestdata/xml2json/dir-fat-cache.json
create mode 100644 tests/qemublocktestdata/xml2json/dir-fat-cache.xml
create mode 100644 tests/qemublocktestdata/xml2json/dir-fat-floppy.json
create mode 100644 tests/qemublocktestdata/xml2json/dir-fat-floppy.xml
create mode 100644 tests/qemublocktestdata/xml2json/dir-fat-readonly.json
create mode 100644 tests/qemublocktestdata/xml2json/dir-fat-readonly.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-aio_threads.json
create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-aio_threads.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-cache-directsync.json
create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-cache-directsync.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-cache-none.json
create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-cache-none.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-cache-unsafe.json
create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-cache-unsafe.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-cache-writeback.json
create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-cache-writeback.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-cache-writethrough.json
create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-cache-writethrough.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-detect.json
create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-detect.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-noopts.json
create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-noopts.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-unmap-detect.json
create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-unmap-detect.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-unmap-discard.json
create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-unmap-ignore.json
create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-unmap-ignore.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-unmap.json
create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-unmap.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-bochs-noopts.json
create mode 100644 tests/qemublocktestdata/xml2json/file-bochs-noopts.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-cloop-noopts.json
create mode 100644 tests/qemublocktestdata/xml2json/file-cloop-noopts.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-dmg-noopts.json
create mode 100644 tests/qemublocktestdata/xml2json/file-dmg-noopts.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-ploop-noopts.json
create mode 100644 tests/qemublocktestdata/xml2json/file-ploop-noopts.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-qcow2-backing-chain-encryption.json
create mode 100644 tests/qemublocktestdata/xml2json/file-qcow2-backing-chain-encryption.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-qcow2-backing-chain-noopts.json
create mode 100644 tests/qemublocktestdata/xml2json/file-qcow2-backing-chain-noopts.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-qcow2-backing-chain-unterminated.json
create mode 100644 tests/qemublocktestdata/xml2json/file-qcow2-backing-chain-unterminated.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-raw-aio_native.json
create mode 100644 tests/qemublocktestdata/xml2json/file-raw-aio_native.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-raw-luks.json
create mode 100644 tests/qemublocktestdata/xml2json/file-raw-luks.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-raw-noopts.json
create mode 100644 tests/qemublocktestdata/xml2json/file-raw-noopts.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-vdi-noopts.json
create mode 100644 tests/qemublocktestdata/xml2json/file-vdi-noopts.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-vhd-noopts.json
create mode 100644 tests/qemublocktestdata/xml2json/file-vhd-noopts.xml
create mode 100644 tests/qemublocktestdata/xml2json/file-vpc-noopts.json
create mode 100644 tests/qemublocktestdata/xml2json/file-vpc-noopts.xml
create mode 100644 tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-cache-unsafe.json
create mode 100644 tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-cache-unsafe.xml
create mode 100644 tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-encryption_auth.json
create mode 100644 tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-encryption_auth.xml
create mode 100644 tests/qemublocktestdata/xml2json/nodename-long-format.xml
create mode 100644 tests/qemublocktestdata/xml2json/nodename-long-protocol.xml
--
2.16.2
3
82
03 May '18
This is part of resolution of: https://bugzilla.redhat.com/show_bug.cgi?id=1511999
Signed-off-by: Chris Venteicher <cventeic(a)redhat.com>
diff to v1:
- Replaced c++ style comments with c style
- qemuMonitorJSONGetCPUModelInfo{ToJSON,FromJSON} use To/From form
- qemuMonitorJSONGetCPUModelInfo{ToJSON,FromJSON} return pointers not integers
- VIR_STEAL_PTR form used
- switch statement uses virReportEnumRangeError
- qemuMonitorJSONHasError(reply, "GenericError") treated as no info, not fatal error
- virJSONValueFree(cpu_props) during error case
diff to v2:
- qemuMonitorJSONGetCPUModelInfo{ToJSON,FromJSON}
works on {"name": "IvyBridge", "props": {}}
rather than {"model": {"name": "IvyBridge", "props": {}}}
- additional cleanups and fixes
Chris Venteicher (3):
qemu_monitor_json: Populate CPUModelInfo struct from json
qemu_monitor_json: Build Json CPU Model Info
qemu_monitor: query-cpu-model-baseline QMP command
src/qemu/qemu_monitor.c | 13 ++++
src/qemu/qemu_monitor.h | 5 ++
src/qemu/qemu_monitor_json.c | 179 +++++++++++++++++++++++++++++++++++++------
src/qemu/qemu_monitor_json.h | 7 ++
4 files changed, 182 insertions(+), 22 deletions(-)
--
2.14.1
4
8
03 May '18
Rather than have virJSONValueArraySize return a -1 when the input
is not an array and then splat an error message, let's check for
an array before calling and then change the return to be a size_t
instead of ssize_t.
That means using the helper virJSONValueIsArray as well as using a
more generic error message such as "Malformed <something> array".
In some cases we can remove stack variables and when we cannot,
those variables should be size_t not ssize_t. Alter a few references
of if (!value) to be if (value == 0) instead as well.
Some callers can already assume an array is being worked on based
on the previous call, so there's less to do.
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
---
Based off a review of the Coverity work from Peter:
https://www.redhat.com/archives/libvir-list/2018-April/msg01613.html
src/locking/lock_daemon.c | 7 ++--
src/logging/log_handler.c | 7 ++--
src/network/bridge_driver.c | 7 ++--
src/qemu/qemu_agent.c | 35 ++++++++++--------
src/qemu/qemu_monitor_json.c | 85 ++++++++++++++++++++-----------------------
src/rpc/virnetdaemon.c | 7 +---
src/rpc/virnetserver.c | 15 +++-----
src/rpc/virnetserverservice.c | 7 ++--
src/util/virjson.c | 5 +--
src/util/virjson.h | 2 +-
src/util/virlockspace.c | 16 ++++----
src/util/virstoragefile.c | 3 +-
tests/testutilsqemuschema.c | 18 +++------
tools/nss/libvirt_nss.c | 3 +-
14 files changed, 97 insertions(+), 120 deletions(-)
diff --git a/src/locking/lock_daemon.c b/src/locking/lock_daemon.c
index 7afff42246..78c33bd29c 100644
--- a/src/locking/lock_daemon.c
+++ b/src/locking/lock_daemon.c
@@ -248,7 +248,6 @@ virLockDaemonNewPostExecRestart(virJSONValuePtr object, bool privileged)
virJSONValuePtr child;
virJSONValuePtr lockspaces;
size_t i;
- ssize_t n;
const char *serverNames[] = { "virtlockd" };
if (VIR_ALLOC(lockd) < 0)
@@ -281,13 +280,13 @@ virLockDaemonNewPostExecRestart(virJSONValuePtr object, bool privileged)
goto error;
}
- if ((n = virJSONValueArraySize(lockspaces)) < 0) {
+ if (!virJSONValueIsArray(lockspaces)) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
- _("Malformed lockspaces data from JSON file"));
+ _("Malformed lockspaces array"));
goto error;
}
- for (i = 0; i < n; i++) {
+ for (i = 0; i < virJSONValueArraySize(lockspaces); i++) {
virLockSpacePtr lockspace;
child = virJSONValueArrayGet(lockspaces, i);
diff --git a/src/logging/log_handler.c b/src/logging/log_handler.c
index 40dfa8ecae..5364e06dff 100644
--- a/src/logging/log_handler.c
+++ b/src/logging/log_handler.c
@@ -292,7 +292,6 @@ virLogHandlerNewPostExecRestart(virJSONValuePtr object,
{
virLogHandlerPtr handler;
virJSONValuePtr files;
- ssize_t n;
size_t i;
if (!(handler = virLogHandlerNew(privileged,
@@ -308,13 +307,13 @@ virLogHandlerNewPostExecRestart(virJSONValuePtr object,
goto error;
}
- if ((n = virJSONValueArraySize(files)) < 0) {
+ if (!virJSONValueIsArray(files)) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
- _("Malformed files data from JSON file"));
+ _("Malformed files array"));
goto error;
}
- for (i = 0; i < n; i++) {
+ for (i = 0; i < virJSONValueArraySize(files); i++) {
virLogHandlerLogFilePtr file;
virJSONValuePtr child = virJSONValueArrayGet(files, i);
diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
index 2e9191f75d..fa9ebe2d68 100644
--- a/src/network/bridge_driver.c
+++ b/src/network/bridge_driver.c
@@ -4124,7 +4124,7 @@ networkGetDHCPLeases(virNetworkPtr net,
size_t i, j;
size_t nleases = 0;
int rv = -1;
- ssize_t size = 0;
+ size_t size = 0;
int custom_lease_file_len = 0;
bool need_results = !!leases;
long long currtime = 0;
@@ -4179,11 +4179,12 @@ networkGetDHCPLeases(virNetworkPtr net,
goto error;
}
- if ((size = virJSONValueArraySize(leases_array)) < 0) {
+ if (!virJSONValueIsArray(leases_array)) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
- _("couldn't fetch array of leases"));
+ _("Malformed lease_entries array"));
goto error;
}
+ size = virJSONValueArraySize(leases_array);
}
currtime = (long long) time(NULL);
diff --git a/src/qemu/qemu_agent.c b/src/qemu/qemu_agent.c
index 488a19d4a6..ef869bf15e 100644
--- a/src/qemu/qemu_agent.c
+++ b/src/qemu/qemu_agent.c
@@ -1490,7 +1490,7 @@ qemuAgentGetVCPUs(qemuAgentPtr mon,
virJSONValuePtr cmd;
virJSONValuePtr reply = NULL;
virJSONValuePtr data = NULL;
- ssize_t ndata;
+ size_t ndata;
if (!(cmd = qemuAgentMakeCommand("guest-get-vcpus", NULL)))
return -1;
@@ -1505,6 +1505,12 @@ qemuAgentGetVCPUs(qemuAgentPtr mon,
goto cleanup;
}
+ if (!virJSONValueIsArray(data)) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("Malformed guest-get-vcpus data array"));
+ goto cleanup;
+ }
+
ndata = virJSONValueArraySize(data);
if (VIR_ALLOC_N(*info, ndata) < 0)
@@ -1869,15 +1875,14 @@ qemuAgentGetFSInfo(qemuAgentPtr mon, virDomainFSInfoPtr **info,
goto cleanup;
}
- if (virJSONValueGetType(data) != VIR_JSON_TYPE_ARRAY) {
+ if (!virJSONValueIsArray(data)) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
- _("guest-get-fsinfo return information was not "
- "an array"));
+ _("Malformed guest-get-fsinfo data array"));
goto cleanup;
}
ndata = virJSONValueArraySize(data);
- if (!ndata) {
+ if (ndata == 0) {
ret = 0;
*info = NULL;
goto cleanup;
@@ -1928,14 +1933,14 @@ qemuAgentGetFSInfo(qemuAgentPtr mon, virDomainFSInfoPtr **info,
goto cleanup;
}
- if (virJSONValueGetType(entry) != VIR_JSON_TYPE_ARRAY) {
+ if (!virJSONValueIsArray(entry)) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
- _("guest-get-fsinfo 'disk' data was not an array"));
+ _("Malformed guest-get-fsinfo 'disk' data array"));
goto cleanup;
}
ndisk = virJSONValueArraySize(entry);
- if (!ndisk)
+ if (ndisk == 0)
continue;
if (VIR_ALLOC_N(info_ret[i]->devAlias, ndisk) < 0)
goto cleanup;
@@ -2035,7 +2040,6 @@ qemuAgentGetInterfaces(qemuAgentPtr mon,
{
int ret = -1;
size_t i, j;
- ssize_t size = -1;
virJSONValuePtr cmd = NULL;
virJSONValuePtr reply = NULL;
virJSONValuePtr ret_array = NULL;
@@ -2065,17 +2069,16 @@ qemuAgentGetInterfaces(qemuAgentPtr mon,
goto cleanup;
}
- if ((size = virJSONValueArraySize(ret_array)) < 0) {
+ if (!virJSONValueIsArray(ret_array)) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("qemu agent didn't return an array of interfaces"));
goto cleanup;
}
- for (i = 0; i < size; i++) {
+ for (i = 0; i < virJSONValueArraySize(ret_array); i++) {
virJSONValuePtr tmp_iface = virJSONValueArrayGet(ret_array, i);
virJSONValuePtr ip_addr_arr = NULL;
const char *hwaddr, *ifname_s, *name = NULL;
- ssize_t ip_addr_arr_size;
virDomainInterfacePtr iface = NULL;
/* Shouldn't happen but doesn't hurt to check neither */
@@ -2131,14 +2134,16 @@ qemuAgentGetInterfaces(qemuAgentPtr mon,
if (!ip_addr_arr)
continue;
- if ((ip_addr_arr_size = virJSONValueArraySize(ip_addr_arr)) < 0)
- /* Mmm, empty 'ip-address'? */
+ if (!virJSONValueIsArray(ip_addr_arr)) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("Malformed ip-addresses array"));
goto error;
+ }
/* If current iface already exists, continue with the count */
addrs_count = iface->naddrs;
- for (j = 0; j < ip_addr_arr_size; j++) {
+ for (j = 0; j < virJSONValueArraySize(ip_addr_arr); j++) {
const char *type, *addr;
virJSONValuePtr ip_addr_obj = virJSONValueArrayGet(ip_addr_arr, j);
virDomainIPAddressPtr ip_addr;
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index 24d37eb41d..98aec3ff10 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -1627,9 +1627,9 @@ qemuMonitorJSONExtractCPUInfo(virJSONValuePtr data,
struct qemuMonitorQueryCpusEntry *cpus = NULL;
int ret = -1;
size_t i;
- ssize_t ncpus;
+ size_t ncpus;
- if ((ncpus = virJSONValueArraySize(data)) <= 0)
+ if ((ncpus = virJSONValueArraySize(data)) == 0)
return -2;
if (VIR_ALLOC_N(cpus, ncpus) < 0)
@@ -3595,7 +3595,7 @@ qemuMonitorJSONQueryRxFilterParse(virJSONValuePtr msg,
int ret = -1;
const char *tmp;
virJSONValuePtr returnArray, entry, table, element;
- ssize_t nTable;
+ size_t nTable;
size_t i;
virNetDevRxFilterPtr fil = virNetDevRxFilterNew();
@@ -3656,12 +3656,13 @@ qemuMonitorJSONQueryRxFilterParse(virJSONValuePtr msg,
goto cleanup;
}
if ((!(table = virJSONValueObjectGet(entry, "unicast-table"))) ||
- ((nTable = virJSONValueArraySize(table)) < 0)) {
+ (!virJSONValueIsArray(table))) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("Missing or invalid 'unicast-table' array "
"in query-rx-filter response"));
goto cleanup;
}
+ nTable = virJSONValueArraySize(table);
if (VIR_ALLOC_N(fil->unicast.table, nTable))
goto cleanup;
for (i = 0; i < nTable; i++) {
@@ -3697,12 +3698,13 @@ qemuMonitorJSONQueryRxFilterParse(virJSONValuePtr msg,
goto cleanup;
}
if ((!(table = virJSONValueObjectGet(entry, "multicast-table"))) ||
- ((nTable = virJSONValueArraySize(table)) < 0)) {
+ (!virJSONValueIsArray(table))) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("Missing or invalid 'multicast-table' array "
"in query-rx-filter response"));
goto cleanup;
}
+ nTable = virJSONValueArraySize(table);
if (VIR_ALLOC_N(fil->multicast.table, nTable))
goto cleanup;
for (i = 0; i < nTable; i++) {
@@ -3731,12 +3733,13 @@ qemuMonitorJSONQueryRxFilterParse(virJSONValuePtr msg,
goto cleanup;
}
if ((!(table = virJSONValueObjectGet(entry, "vlan-table"))) ||
- ((nTable = virJSONValueArraySize(table)) < 0)) {
+ (!virJSONValueIsArray(table))) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("Missing or invalid 'vlan-table' array "
"in query-rx-filter response"));
goto cleanup;
}
+ nTable = virJSONValueArraySize(table);
if (VIR_ALLOC_N(fil->vlan.table, nTable))
goto cleanup;
for (i = 0; i < nTable; i++) {
@@ -4575,7 +4578,7 @@ qemuMonitorJSONGetAllBlockJobInfo(qemuMonitorPtr mon)
virJSONValuePtr cmd = NULL;
virJSONValuePtr reply = NULL;
virJSONValuePtr data;
- ssize_t nr_results;
+ size_t nr_results;
size_t i;
virHashTablePtr blockJobs = NULL;
@@ -4591,12 +4594,7 @@ qemuMonitorJSONGetAllBlockJobInfo(qemuMonitorPtr mon)
goto cleanup;
}
- if ((nr_results = virJSONValueArraySize(data)) < 0) {
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
- _("unable to determine array size"));
- goto cleanup;
- }
-
+ nr_results = virJSONValueArraySize(data);
if (!(blockJobs = virHashCreate(nr_results, virHashValueFree)))
goto cleanup;
@@ -5114,7 +5112,7 @@ int qemuMonitorJSONGetMachines(qemuMonitorPtr mon,
virJSONValuePtr reply = NULL;
virJSONValuePtr data;
qemuMonitorMachineInfoPtr *infolist = NULL;
- ssize_t n = 0;
+ size_t n = 0;
size_t i;
*machines = NULL;
@@ -5206,7 +5204,7 @@ qemuMonitorJSONGetCPUDefinitions(qemuMonitorPtr mon,
virJSONValuePtr reply = NULL;
virJSONValuePtr data;
qemuMonitorCPUDefInfoPtr *cpulist = NULL;
- int n = 0;
+ size_t n = 0;
size_t i;
*cpus = NULL;
@@ -5257,7 +5255,7 @@ qemuMonitorJSONGetCPUDefinitions(qemuMonitorPtr mon,
if (virJSONValueObjectHasKey(child, "unavailable-features")) {
virJSONValuePtr blockers;
size_t j;
- int len;
+ size_t len;
blockers = virJSONValueObjectGetArray(child,
"unavailable-features");
@@ -5494,7 +5492,7 @@ int qemuMonitorJSONGetCommands(qemuMonitorPtr mon,
virJSONValuePtr reply = NULL;
virJSONValuePtr data;
char **commandlist = NULL;
- ssize_t n = 0;
+ size_t n = 0;
size_t i;
*commands = NULL;
@@ -5550,7 +5548,7 @@ int qemuMonitorJSONGetEvents(qemuMonitorPtr mon,
virJSONValuePtr reply = NULL;
virJSONValuePtr data;
char **eventlist = NULL;
- ssize_t n = 0;
+ size_t n = 0;
size_t i;
*events = NULL;
@@ -5614,7 +5612,7 @@ qemuMonitorJSONGetCommandLineOptionParameters(qemuMonitorPtr mon,
virJSONValuePtr data = NULL;
virJSONValuePtr array = NULL;
char **paramlist = NULL;
- ssize_t n = 0;
+ size_t n = 0;
size_t i;
*params = NULL;
@@ -5646,17 +5644,17 @@ qemuMonitorJSONGetCommandLineOptionParameters(qemuMonitorPtr mon,
"return data"));
goto cleanup;
}
- qemuMonitorSetOptions(mon, array);
- }
- if ((n = virJSONValueArraySize(array)) < 0) {
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
- _("query-command-line-options reply data was not "
- "an array"));
- goto cleanup;
+ if (!virJSONValueIsArray(array)) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("Malformed query-cmmand-line-options array"));
+ goto cleanup;
+ }
+
+ qemuMonitorSetOptions(mon, array);
}
- for (i = 0; i < n; i++) {
+ for (i = 0; i < virJSONValueArraySize(array); i++) {
virJSONValuePtr child = virJSONValueArrayGet(array, i);
const char *tmp;
@@ -5681,12 +5679,12 @@ qemuMonitorJSONGetCommandLineOptionParameters(qemuMonitorPtr mon,
if (found)
*found = true;
- if ((n = virJSONValueArraySize(data)) < 0) {
+ if (!virJSONValueIsArray(data)) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
- _("query-command-line-options parameter data was not "
- "an array"));
+ _("Malformed query-cmmand-line-options parameters array"));
goto cleanup;
}
+ n = virJSONValueArraySize(data);
/* null-terminated list */
if (VIR_ALLOC_N(paramlist, n + 1) < 0)
@@ -5776,7 +5774,7 @@ int qemuMonitorJSONGetObjectTypes(qemuMonitorPtr mon,
virJSONValuePtr reply = NULL;
virJSONValuePtr data;
char **typelist = NULL;
- ssize_t n = 0;
+ size_t n = 0;
size_t i;
*types = NULL;
@@ -5832,7 +5830,7 @@ int qemuMonitorJSONGetObjectListPaths(qemuMonitorPtr mon,
virJSONValuePtr reply = NULL;
virJSONValuePtr data;
qemuMonitorJSONListPathPtr *pathlist = NULL;
- ssize_t n = 0;
+ size_t n = 0;
size_t i;
*paths = NULL;
@@ -6062,7 +6060,7 @@ int qemuMonitorJSONGetDeviceProps(qemuMonitorPtr mon,
virJSONValuePtr reply = NULL;
virJSONValuePtr data;
char **proplist = NULL;
- ssize_t n = 0;
+ size_t n = 0;
size_t i;
*props = NULL;
@@ -6161,7 +6159,7 @@ qemuMonitorJSONGetMigrationCapabilities(qemuMonitorPtr mon,
virJSONValuePtr caps;
char **list = NULL;
size_t i;
- ssize_t n;
+ size_t n;
*capabilities = NULL;
@@ -6272,7 +6270,7 @@ qemuMonitorJSONGetGICCapabilities(qemuMonitorPtr mon,
virJSONValuePtr caps;
virGICCapability *list = NULL;
size_t i;
- ssize_t n;
+ size_t n;
*capabilities = NULL;
@@ -6493,7 +6491,7 @@ qemuMonitorJSONGetStringArray(qemuMonitorPtr mon, const char *qmpCmd,
virJSONValuePtr reply = NULL;
virJSONValuePtr data;
char **list = NULL;
- ssize_t n = 0;
+ size_t n = 0;
size_t i;
*array = NULL;
@@ -6890,14 +6888,11 @@ qemuMonitorJSONParseCPUx86Features(virJSONValuePtr data)
virCPUDataPtr cpudata = NULL;
virCPUx86CPUID cpuid;
size_t i;
- ssize_t n;
-
- n = virJSONValueArraySize(data);
if (!(cpudata = virCPUDataNew(VIR_ARCH_X86_64)))
goto error;
- for (i = 0; i < n; i++) {
+ for (i = 0; i < virJSONValueArraySize(data); i++) {
if (qemuMonitorJSONParseCPUx86FeatureWord(virJSONValueArrayGet(data, i),
&cpuid) < 0 ||
virCPUx86DataAddCPUID(cpudata, &cpuid) < 0)
@@ -6958,7 +6953,7 @@ qemuMonitorJSONCheckCPUx86(qemuMonitorPtr mon)
virJSONValuePtr reply = NULL;
virJSONValuePtr data;
size_t i;
- ssize_t n;
+ size_t n;
int ret = -1;
if (!(cmd = qemuMonitorJSONMakeCommand("qom-list",
@@ -7096,7 +7091,7 @@ qemuMonitorJSONGetIOThreads(qemuMonitorPtr mon,
virJSONValuePtr reply = NULL;
virJSONValuePtr data;
qemuMonitorIOThreadInfoPtr *infolist = NULL;
- ssize_t n = 0;
+ size_t n = 0;
size_t i;
*iothreads = NULL;
@@ -7178,7 +7173,6 @@ qemuMonitorJSONGetMemoryDeviceInfo(qemuMonitorPtr mon,
virJSONValuePtr reply = NULL;
virJSONValuePtr data = NULL;
qemuMonitorMemoryDeviceInfoPtr meminfo = NULL;
- ssize_t n;
size_t i;
if (!(cmd = qemuMonitorJSONMakeCommand("query-memory-devices", NULL)))
@@ -7196,9 +7190,8 @@ qemuMonitorJSONGetMemoryDeviceInfo(qemuMonitorPtr mon,
goto cleanup;
data = virJSONValueObjectGetArray(reply, "return");
- n = virJSONValueArraySize(data);
- for (i = 0; i < n; i++) {
+ for (i = 0; i < virJSONValueArraySize(data); i++) {
virJSONValuePtr elem = virJSONValueArrayGet(data, i);
const char *type;
@@ -7664,7 +7657,7 @@ qemuMonitorJSONGetHotpluggableCPUs(qemuMonitorPtr mon,
size_t *nentries)
{
struct qemuMonitorQueryHotpluggableCpusEntry *info = NULL;
- ssize_t ninfo = 0;
+ size_t ninfo = 0;
int ret = -1;
size_t i;
virJSONValuePtr data;
diff --git a/src/rpc/virnetdaemon.c b/src/rpc/virnetdaemon.c
index eb0b822545..31b687de12 100644
--- a/src/rpc/virnetdaemon.c
+++ b/src/rpc/virnetdaemon.c
@@ -322,12 +322,7 @@ virNetDaemonNewPostExecRestart(virJSONValuePtr object,
goto error;
} else if (virJSONValueIsArray(servers)) {
size_t i;
- ssize_t n = virJSONValueArraySize(servers);
- if (n < 0) {
- virReportError(VIR_ERR_INTERNAL_ERROR,
- _("Server count %zd should be positive"), n);
- goto error;
- }
+ size_t n = virJSONValueArraySize(servers);
if (n > nDefServerNames) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("Server count %zd greater than default name count %zu"),
diff --git a/src/rpc/virnetserver.c b/src/rpc/virnetserver.c
index f4105b1394..5aeb188900 100644
--- a/src/rpc/virnetserver.c
+++ b/src/rpc/virnetserver.c
@@ -411,7 +411,6 @@ virNetServerPtr virNetServerNewPostExecRestart(virJSONValuePtr object,
virJSONValuePtr clients;
virJSONValuePtr services;
size_t i;
- ssize_t n;
unsigned int min_workers;
unsigned int max_workers;
unsigned int priority_workers;
@@ -492,14 +491,13 @@ virNetServerPtr virNetServerNewPostExecRestart(virJSONValuePtr object,
goto error;
}
- n = virJSONValueArraySize(services);
- if (n < 0) {
+ if (!virJSONValueIsArray(services)) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
- _("Malformed services data in JSON document"));
+ _("Malformed services array"));
goto error;
}
- for (i = 0; i < n; i++) {
+ for (i = 0; i < virJSONValueArraySize(services); i++) {
virNetServerServicePtr service;
virJSONValuePtr child = virJSONValueArrayGet(services, i);
if (!child) {
@@ -525,14 +523,13 @@ virNetServerPtr virNetServerNewPostExecRestart(virJSONValuePtr object,
goto error;
}
- n = virJSONValueArraySize(clients);
- if (n < 0) {
+ if (!virJSONValueIsArray(clients)) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
- _("Malformed clients data in JSON document"));
+ _("Malformed clients array"));
goto error;
}
- for (i = 0; i < n; i++) {
+ for (i = 0; i < virJSONValueArraySize(clients); i++) {
virNetServerClientPtr client;
virJSONValuePtr child = virJSONValueArrayGet(clients, i);
if (!child) {
diff --git a/src/rpc/virnetserverservice.c b/src/rpc/virnetserverservice.c
index fb19d09dda..23fc23cab4 100644
--- a/src/rpc/virnetserverservice.c
+++ b/src/rpc/virnetserverservice.c
@@ -325,7 +325,7 @@ virNetServerServicePtr virNetServerServiceNewPostExecRestart(virJSONValuePtr obj
virNetServerServicePtr svc;
virJSONValuePtr socks;
size_t i;
- ssize_t n;
+ size_t n;
unsigned int max;
if (virNetServerServiceInitialize() < 0)
@@ -358,12 +358,13 @@ virNetServerServicePtr virNetServerServiceNewPostExecRestart(virJSONValuePtr obj
goto error;
}
- if ((n = virJSONValueArraySize(socks)) < 0) {
+ if (!virJSONValueIsArray(socks)) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
- _("socks field in JSON was not an array"));
+ _("Malformed socks array"));
goto error;
}
+ n = virJSONValueArraySize(socks);
if (VIR_ALLOC_N(svc->socks, n) < 0)
goto error;
svc->nsocks = n;
diff --git a/src/util/virjson.c b/src/util/virjson.c
index dfe00d9280..bb4e3c257b 100644
--- a/src/util/virjson.c
+++ b/src/util/virjson.c
@@ -971,12 +971,9 @@ virJSONValueIsArray(virJSONValuePtr array)
}
-ssize_t
+size_t
virJSONValueArraySize(const virJSONValue *array)
{
- if (array->type != VIR_JSON_TYPE_ARRAY)
- return -1;
-
return array->data.array.nvalues;
}
diff --git a/src/util/virjson.h b/src/util/virjson.h
index 0f098892b4..e4a82bdbc8 100644
--- a/src/util/virjson.h
+++ b/src/util/virjson.h
@@ -81,7 +81,7 @@ virJSONValuePtr virJSONValueObjectGetByType(virJSONValuePtr object,
bool virJSONValueIsObject(virJSONValuePtr object);
bool virJSONValueIsArray(virJSONValuePtr array);
-ssize_t virJSONValueArraySize(const virJSONValue *array);
+size_t virJSONValueArraySize(const virJSONValue *array);
virJSONValuePtr virJSONValueArrayGet(virJSONValuePtr object, unsigned int element);
virJSONValuePtr virJSONValueArraySteal(virJSONValuePtr object, unsigned int element);
typedef int (*virJSONArrayIteratorFunc)(size_t pos,
diff --git a/src/util/virlockspace.c b/src/util/virlockspace.c
index 41af0cdb6d..3364c843aa 100644
--- a/src/util/virlockspace.c
+++ b/src/util/virlockspace.c
@@ -293,7 +293,6 @@ virLockSpacePtr virLockSpaceNewPostExecRestart(virJSONValuePtr object)
{
virLockSpacePtr lockspace;
virJSONValuePtr resources;
- ssize_t n;
size_t i;
VIR_DEBUG("object=%p", object);
@@ -324,19 +323,19 @@ virLockSpacePtr virLockSpaceNewPostExecRestart(virJSONValuePtr object)
goto error;
}
- if ((n = virJSONValueArraySize(resources)) < 0) {
+ if (!virJSONValueIsArray(resources)) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
- _("Malformed resources value in JSON document"));
+ _("Malformed resources array"));
goto error;
}
- for (i = 0; i < n; i++) {
+ for (i = 0; i < virJSONValueArraySize(resources); i++) {
virJSONValuePtr child = virJSONValueArrayGet(resources, i);
virLockSpaceResourcePtr res;
const char *tmp;
virJSONValuePtr owners;
size_t j;
- ssize_t m;
+ size_t m;
if (VIR_ALLOC(res) < 0)
goto error;
@@ -396,18 +395,19 @@ virLockSpacePtr virLockSpaceNewPostExecRestart(virJSONValuePtr object)
goto error;
}
- if ((m = virJSONValueArraySize(owners)) < 0) {
+ if (!virJSONValueIsArray(owners)) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
- _("Malformed owners value in JSON document"));
+ _("Malformed owners array"));
virLockSpaceResourceFree(res);
goto error;
}
- res->nOwners = m;
+ m = virJSONValueArraySize(owners);
if (VIR_ALLOC_N(res->owners, res->nOwners) < 0) {
virLockSpaceResourceFree(res);
goto error;
}
+ res->nOwners = m;
for (j = 0; j < res->nOwners; j++) {
unsigned long long int owner;
diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
index 531540ac91..117ba8430c 100644
--- a/src/util/virstoragefile.c
+++ b/src/util/virstoragefile.c
@@ -2924,8 +2924,7 @@ virStorageSourceParseBackingJSONGluster(virStorageSourcePtr src,
return -1;
nservers = virJSONValueArraySize(server);
-
- if (nservers < 1) {
+ if (nservers == 0) {
virReportError(VIR_ERR_INVALID_ARG, "%s",
_("at least 1 server is necessary in "
"JSON backing definition for gluster volume"));
diff --git a/tests/testutilsqemuschema.c b/tests/testutilsqemuschema.c
index 21f5d119e8..46bbc4f1e5 100644
--- a/tests/testutilsqemuschema.c
+++ b/tests/testutilsqemuschema.c
@@ -101,11 +101,9 @@ testQEMUSchemaStealObjectMemberByName(const char *name,
{
virJSONValuePtr member;
virJSONValuePtr ret = NULL;
- size_t n;
size_t i;
- n = virJSONValueArraySize(members);
- for (i = 0; i < n; i++) {
+ for (i = 0; i < virJSONValueArraySize(members); i++) {
member = virJSONValueArrayGet(members, i);
if (STREQ_NULLABLE(name, virJSONValueObjectGetString(member, "name"))) {
@@ -188,7 +186,6 @@ testQEMUSchemaValidateObjectMergeVariant(virJSONValuePtr root,
virHashTablePtr schema,
virBufferPtr debug)
{
- size_t n;
size_t i;
virJSONValuePtr variants = NULL;
virJSONValuePtr variant;
@@ -203,8 +200,7 @@ testQEMUSchemaValidateObjectMergeVariant(virJSONValuePtr root,
return -2;
}
- n = virJSONValueArraySize(variants);
- for (i = 0; i < n; i++) {
+ for (i = 0; i < virJSONValueArraySize(variants); i++) {
variant = virJSONValueArrayGet(variants, i);
if (STREQ_NULLABLE(variantname,
@@ -342,7 +338,6 @@ testQEMUSchemaValidateEnum(virJSONValuePtr obj,
const char *objstr;
virJSONValuePtr values = NULL;
virJSONValuePtr value;
- size_t n;
size_t i;
if (virJSONValueGetType(obj) != VIR_JSON_TYPE_STRING) {
@@ -358,8 +353,7 @@ testQEMUSchemaValidateEnum(virJSONValuePtr obj,
return -2;
}
- n = virJSONValueArraySize(values);
- for (i = 0; i < n; i++) {
+ for (i = 0; i < virJSONValueArraySize(values); i++) {
value = virJSONValueArrayGet(values, i);
if (STREQ_NULLABLE(objstr, virJSONValueGetString(value))) {
@@ -383,7 +377,6 @@ testQEMUSchemaValidateArray(virJSONValuePtr objs,
const char *elemtypename = virJSONValueObjectGetString(root, "element-type");
virJSONValuePtr elementschema;
virJSONValuePtr obj;
- size_t n;
size_t i;
if (virJSONValueGetType(objs) != VIR_JSON_TYPE_ARRAY) {
@@ -401,8 +394,7 @@ testQEMUSchemaValidateArray(virJSONValuePtr objs,
virBufferAddLit(debug, "[\n");
virBufferAdjustIndent(debug, 3);
- n = virJSONValueArraySize(objs);
- for (i = 0; i < n; i++) {
+ for (i = 0; i < virJSONValueArraySize(objs); i++) {
obj = virJSONValueArrayGet(objs, i);
if (testQEMUSchemaValidateRecurse(obj, elementschema, schema, debug) < 0)
@@ -423,8 +415,8 @@ testQEMUSchemaValidateAlternate(virJSONValuePtr obj,
{
virJSONValuePtr members;
virJSONValuePtr member;
- size_t n;
size_t i;
+ size_t n;
const char *membertype;
virJSONValuePtr memberschema;
int indent;
diff --git a/tools/nss/libvirt_nss.c b/tools/nss/libvirt_nss.c
index 62fe589bed..ec73ea575a 100644
--- a/tools/nss/libvirt_nss.c
+++ b/tools/nss/libvirt_nss.c
@@ -309,8 +309,7 @@ findLease(const char *name,
}
VIR_DIR_CLOSE(dir);
- if ((nleases = virJSONValueArraySize(leases_array)) < 0)
- goto cleanup;
+ nleases = virJSONValueArraySize(leases_array);
DEBUG("Read %zd leases", nleases);
#if !defined(LIBVIRT_NSS_GUEST)
--
2.13.6
1
1
[libvirt] [PATCH v4] tests/Makefile.am: use LIBTOOL variable instead of hardcoded name
by Maciej Wolny 02 May '18
by Maciej Wolny 02 May '18
02 May '18
Fixes "can't find libtool" error when running valgrind checks.
Signed-off-by: Maciej Wolny <maciej.wolny(a)codethink.co.uk>
---
tests/Makefile.am | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 7b93fbde6..05db6b119 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -487,7 +487,7 @@ VALGRIND = valgrind --quiet --leak-check=full --trace-children=yes \
--trace-children-skip="*/tools/virsh","*/tests/commandhelper" \
--suppressions=$(srcdir)/.valgrind.supp
valgrind:
- $(MAKE) check VG="libtool --mode=execute $(VALGRIND)"
+ $(MAKE) check VG="$(LIBTOOL) --mode=execute $(VALGRIND)"
sockettest_SOURCES = \
sockettest.c \
--
2.11.0
2
1
02 May '18
Changes from [v1]:
* drop the virnetsockettest changes, since the relationship
between the errors seen on FreeBSD and IPv4 clients connecting
to IPv6 sockets has turned out to be just a red herring;
* fix the mocking instead of dropping test cases that don't work
without it.
[v1] https://www.redhat.com/archives/libvir-list/2018-April/msg02611.html
Andrea Bolognani (8):
test: Introduce VIR_MOCK_REAL_INIT_VERSIONED()
tests: Mock realpath()
all: Use realpath() instead of canonicalize_file_name()
tests: Stop mocking canonicalize_file_name()
gnulib: Drop canonicalize-lgpl module
syntax-check: Prohibit canonicalize_file_name()
tests: Fix mode_t usage with va_arg()
tests: Build virpcimock on non-Linux
bootstrap.conf | 1 -
cfg.mk | 10 ++++
src/storage/storage_backend_fs.c | 2 +-
src/util/virfile.c | 2 +-
src/util/virpci.c | 2 +-
tests/virmock.h | 13 +++++
tests/virpcimock.c | 118 +++++++++++++++++++++++----------------
tests/virstoragetest.c | 10 ++--
tests/virtestmock.c | 13 ++---
9 files changed, 107 insertions(+), 64 deletions(-)
--
2.14.3
3
14
[libvirt] [PATCH v3] tests/Makefile.am: use LIBTOOL variable instead of hardcoded name
by Maciej Wolny 02 May '18
by Maciej Wolny 02 May '18
02 May '18
Fixes "can't find libtool" error when running valgrind checks.
---
tests/Makefile.am | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 7b93fbde6..05db6b119 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -487,7 +487,7 @@ VALGRIND = valgrind --quiet --leak-check=full --trace-children=yes \
--trace-children-skip="*/tools/virsh","*/tests/commandhelper" \
--suppressions=$(srcdir)/.valgrind.supp
valgrind:
- $(MAKE) check VG="libtool --mode=execute $(VALGRIND)"
+ $(MAKE) check VG="$(LIBTOOL) --mode=execute $(VALGRIND)"
sockettest_SOURCES = \
sockettest.c \
--
2.11.0
2
3
As planned the release is done, it is tagged into git and I pushed
signed tarball and rpms to the usual place:
ftp://libvirt.org/libvirt/
I also pushed a release of the python bindings libvirt-python 4.3.0 at
ftp://libvirt.org/libvirt/python
As usual this release is a balance of features, improvement and bug fixes,
however it is to note that this release also remove the Xen daemon based driver,
hopefully by now nobody uses such very old Xen version:
New features
- qemu: Add support for the pcie-to-pci-bridge controller
Pure PCIe guests such as x86_64/q35 and aarch64/virt will now add this
controller when traditional PCI devices are in use.
- Xen: Support setting CPU features for host-passthrough model
The CPU model presented to Xen HVM domains is equivalent to libvirt's
host-passthrough model, although individual features can be enabled and
disabled via the cpuid setting. The libvirt libxl driver now supports
enabling and disabling individual features of the host-passthrough CPU
model.
Removed features
- Xen: Drop the legacy xend-based driver
The xm/xend toolstack was deprecated in Xen 4.2 and removed from the
Xen sources in the 4.5 development cycle. The libvirt driver based on
xend is now removed from the libvirt sources.
Improvements
- qemu: Support hot plug and hot unplug of mediated devices
Libvirt now allows mediated devices to be hot plugged and hot unplugged
from a guest rather than reporting an error that this isn't supported.
In fact, kernel has been supporting this since 4.10.
Bug fixes
- Improve handling of device mapper targets
When starting a domain with a disk backed by a device mapper volume
libvirt also needs to allow the storage backing the device mapper in
CGroups. In the past kernel did not care, but starting from 4.16
CGroups are consulted on each access to the device mapper target.
thanks everybody for your help on building that release, be it with ideas,
code, patches, reviews, documentation, localization, etc...
Enjoy this month's release,
Daniel
--
Daniel Veillard | Red Hat Developers Tools http://developer.redhat.com/
veillard(a)redhat.com | libxml Gnome XML XSLT toolkit http://xmlsoft.org/
http://veillard.com/ | virtualization library http://libvirt.org/
1
0
02 May '18
Unused since its introduction in commit <76b644c>.
Signed-off-by: Ján Tomko <jtomko(a)redhat.com>
---
src/conf/domain_conf.h | 3 ---
1 file changed, 3 deletions(-)
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 3c7eccb8ca..3e135c6364 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -875,9 +875,6 @@ typedef enum {
VIR_DOMAIN_FS_WRPOLICY_LAST
} virDomainFSWrpolicy;
-/* Allow 2 MB ram usage */
-# define VIR_DOMAIN_FS_RAM_DEFAULT_USAGE (1024 * 2)
-
struct _virDomainFSDef {
int type;
int fsdriver; /* enum virDomainFSDriverType */
--
2.13.6
2
1
s/atttribute/attribute/
Signed-off-by: Ján Tomko <jtomko(a)redhat.com>
---
Pushed as trivial.
src/Makefile.am | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/Makefile.am b/src/Makefile.am
index 0d8d380df1..0c380780c3 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -668,7 +668,7 @@ libvirt_lxc_la_LIBADD = libvirt.la $(CYGWIN_EXTRA_LIBADD)
# Since virt-login-shell will be setuid, we must do everything
# we can to avoid linking to other libraries. Many of them do
-# unsafe things in functions marked __atttribute__((constructor)).
+# unsafe things in functions marked __attribute__((constructor)).
# This library is built to include the bare minimum required to
# have a RPC client for local UNIX socket access only. We use
# the ../config-post.h header to disable all external deps that
--
2.16.1
1
0
[libvirt] [PATCH] docs: rng: Add missing <interleave> element to panic device
by Erik Skultety 02 May '18
by Erik Skultety 02 May '18
02 May '18
Panic device has 2 optional sub-elements - <alias> and <address> the
order of which should be interchangeable in the XML.
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1456165
Signed-off-by: Erik Skultety <eskultet(a)redhat.com>
---
docs/schemas/domaincommon.rng | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index 3569b92127..7c02edb7f8 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -6070,12 +6070,14 @@
</choice>
</attribute>
</optional>
- <optional>
- <ref name="alias"/>
- </optional>
- <optional>
- <ref name="address"/>
- </optional>
+ <interleave>
+ <optional>
+ <ref name="alias"/>
+ </optional>
+ <optional>
+ <ref name="address"/>
+ </optional>
+ </interleave>
</element>
</define>
<define name="rawIO">
--
2.14.3
2
1
The virnetsockettest is somewhat unreliable on FreeBSD. On a single CPU
guest it will appear to run successfully, as you add more CPUs though it
will increasingly get failures. Testing on a 8 CPU guest gives 100%
failure rate.
Daniel P. Berrangé (2):
tests: merge code for UNIX and TCP socket testing
tests: rewrite socket to do something sensible and reliable
tests/virnetsockettest.c | 228 +++++++++++++++++++++++++++++++----------------
1 file changed, 153 insertions(+), 75 deletions(-)
--
2.14.3
2
4
[libvirt] [PATCH v4 1/2] qemu: avoid slash characters to the new domain name.
by Julio Faracco 01 May '18
by Julio Faracco 01 May '18
01 May '18
The 'domrename' command needs to check if the new domain name contains
the slash character. This character is not accepted by libvirt XML
definition because it is an invalid char (see Cole's commit b1fc6a7b7).
This commit enhace the 'domrename' command adding this check.
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1333232
Signed-off-by: Julio Faracco <jcfaracco(a)gmail.com>
---
src/qemu/qemu_driver.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 7484b00e23..79a1ddcebf 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -20752,6 +20752,12 @@ qemuDomainRenameCallback(virDomainObjPtr vm,
virCheckFlags(0, ret);
+ if (strchr(new_name, '/')) {
+ virReportError(VIR_ERR_XML_ERROR,
+ _("name %s cannot contain '/'"), new_name);
+ return -1;
+ }
+
cfg = virQEMUDriverGetConfig(driver);
if (VIR_STRDUP(new_dom_name, new_name) < 0)
--
2.17.0
1
2
[libvirt] [PATCH] tests/Makefile.am: use LIBTOOL variable instead of hardcoded name
by Maciej Wolny 01 May '18
by Maciej Wolny 01 May '18
01 May '18
This caused an error on Debian, where the tool is called libtoolize, not
libtool.
---
tests/Makefile.am | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 7b93fbde6..05db6b119 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -487,7 +487,7 @@ VALGRIND = valgrind --quiet --leak-check=full --trace-children=yes \
--trace-children-skip="*/tools/virsh","*/tests/commandhelper" \
--suppressions=$(srcdir)/.valgrind.supp
valgrind:
- $(MAKE) check VG="libtool --mode=execute $(VALGRIND)"
+ $(MAKE) check VG="$(LIBTOOL) --mode=execute $(VALGRIND)"
sockettest_SOURCES = \
sockettest.c \
--
2.11.0
3
3
[libvirt] [PATCH v2] tests/Makefile.am: use LIBTOOL variable instead of hardcoded name
by Maciej Wolny 01 May '18
by Maciej Wolny 01 May '18
01 May '18
Fixes "can't find libtool" error when running valgrind checks.
---
tests/Makefile.am | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 7b93fbde6..923d84ed3 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -487,7 +487,7 @@ VALGRIND = valgrind --quiet --leak-check=full --trace-children=yes \
--trace-children-skip="*/tools/virsh","*/tests/commandhelper" \
--suppressions=$(srcdir)/.valgrind.supp
valgrind:
- $(MAKE) check VG="libtool --mode=execute $(VALGRIND)"
+ $(MAKE) check VG="$(top_srcdir)/libtool --mode=execute $(VALGRIND)"
sockettest_SOURCES = \
sockettest.c \
--
2.11.0
2
1
01 May '18
Signed-off-by: Yoni Bettan <ybettan(a)redhat.com>
---
updater/virt-tools/config.ini | 6 ++++++
updater/virt-tools/images/ybettan.png | Bin 0 -> 8965 bytes
2 files changed, 6 insertions(+)
create mode 100644 updater/virt-tools/images/ybettan.png
diff --git a/updater/virt-tools/config.ini b/updater/virt-tools/config.ini
index bd3b7ce..cfb3a53 100644
--- a/updater/virt-tools/config.ini
+++ b/updater/virt-tools/config.ini
@@ -182,3 +182,9 @@ name = Fabian Deutsch
[https://kvmonz.blogspot.com/feeds/posts/default]
name = KVM on Z
+
+[https://howtovms.wordpress.com/feed/]
+name = Yoni Bettan
+face = ybettan.png
+facewidth = 52
+faceheight = 80
diff --git a/updater/virt-tools/images/ybettan.png b/updater/virt-tools/images/ybettan.png
new file mode 100644
index 0000000000000000000000000000000000000000..3d56fb38e03a93ec11d32f83acb1e0c3c042c151
GIT binary patch
literal 8965
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
R$!>LkhRRFjN=3wn{{aIWQUCw|
literal 0
HcmV?d00001
--
2.14.3
2
2
01 May '18
Signed-off-by: Yoni Bettan <ybettan(a)redhat.com>
---
updater/virt-tools/config.ini | 6 ++++++
updater/virt-tools/images/ybettan.png | Bin 0 -> 105973 bytes
2 files changed, 6 insertions(+)
create mode 100644 updater/virt-tools/images/ybettan.png
diff --git a/updater/virt-tools/config.ini b/updater/virt-tools/config.ini
index bd3b7ce..ac9695f 100644
--- a/updater/virt-tools/config.ini
+++ b/updater/virt-tools/config.ini
@@ -182,3 +182,9 @@ name = Fabian Deutsch
[https://kvmonz.blogspot.com/feeds/posts/default]
name = KVM on Z
+
+[https://howtovms.wordpress.com/feed/]
+name = Yoni Bettan
+face = ybettan.png
+facewidth = 80
+faceheight = 80
diff --git a/updater/virt-tools/images/ybettan.png b/updater/virt-tools/images/ybettan.png
new file mode 100644
index 0000000000000000000000000000000000000000..e44e37821b82e37c7a8a00db3ad36c7baddc3add
GIT binary patch
literal 105973
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
literal 0
HcmV?d00001
--
2.14.3
2
2
[libvirt] [PATCH v3] qemu: avoid slash characters to the new domain name.
by Julio Faracco 01 May '18
by Julio Faracco 01 May '18
01 May '18
The 'domrename' command needs to check if the new domain name contains
the slash character. This character is not accepted by libvirt XML
definition because it is an invalid char (see Cole's commit b1fc6a7b7).
This commit enhace the 'domrename' command adding this check.
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1333232
Signed-off-by: Julio Faracco <jcfaracco(a)gmail.com>
---
src/qemu/qemu_driver.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 7484b00e2..70ae18524 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -20757,6 +20757,12 @@ qemuDomainRenameCallback(virDomainObjPtr vm,
if (VIR_STRDUP(new_dom_name, new_name) < 0)
goto cleanup;
+ if (strchr(new_dom_name, '/')) {
+ virReportError(VIR_ERR_XML_ERROR,
+ _("name %s cannot contain '/'"), new_dom_name);
+ goto cleanup;
+ }
+
if (!(new_dom_cfg_file = virDomainConfigFile(cfg->configDir,
new_dom_name)) ||
!(old_dom_cfg_file = virDomainConfigFile(cfg->configDir,
--
2.14.1
2
3
01 May '18
Implementation of libvirt functions to support the
QEMU query-cpu-model-baseline QMP command.
This is part of resolution of: https://bugzilla.redhat.com/show_bug.cgi?id=1511999
Signed-off-by: Chris Venteicher <cventeic(a)redhat.com>
diff to v1:
- Replaced c++ style comments with c style
- qemuMonitorJSONGetCPUModelInfo{ToJSON,FromJSON} use To/From form
- qemuMonitorJSONGetCPUModelInfo{ToJSON,FromJSON} return pointers not integers
- VIR_STEAL_PTR form used
- switch statement uses virReportEnumRangeError
- qemuMonitorJSONHasError(reply, "GenericError") treated as no info, not fatal error
- virJSONValueFree(cpu_props) during error case
Chris Venteicher (3):
qemu_monitor_json: Populate CPUModelInfo struct from json
qemu_monitor_json: Build Json CPU Model Info
qemu_monitor: query-cpu-model-baseline QMP command
src/qemu/qemu_monitor.c | 13 ++++
src/qemu/qemu_monitor.h | 5 ++
src/qemu/qemu_monitor_json.c | 175 +++++++++++++++++++++++++++++++++++++------
src/qemu/qemu_monitor_json.h | 7 ++
4 files changed, 178 insertions(+), 22 deletions(-)
--
2.14.1
3
10
macOS still chokes on it, but hey, it's something.
Andrea Bolognani (4):
tests: Fix virnetsockettest on FreeBSD
tests: Fix qemumemlocktest on FreeBSD
tests: Fix qemuxml2xmltest on FreeBSD
tests: Fix qemuxml2argvtest on FreeBSD
tests/qemumemlocktest.c | 12 ++++++++++++
tests/qemuxml2argvtest.c | 23 +++++++++++++++++++++++
tests/qemuxml2xmltest.c | 3 +++
tests/virnetsockettest.c | 10 ++++++++++
4 files changed, 48 insertions(+)
--
2.14.3
2
11