92 min agovirt-admin.pod: Remove a statement about remote access to the daemon master
Erik Skultety [Wed, 27 Jul 2016 11:39:57 +0000]
virt-admin.pod: Remove a statement about remote access to the daemon

There's been a forgotten fragment (copy-paste error probably) in the
virt-admin's man page referring the reader to our web page on how to construct
URIs in case of remote access, which sort of implies that we support it which
we don't at the moment, so better remove that.

Signed-off-by: Erik Skultety <>

106 min agoqemu: command: Add support for multi-host gluster disks
Prasanna Kumar Kalever [Mon, 25 Jul 2016 13:24:54 +0000]
qemu: command: Add support for multi-host gluster disks

To allow using failover with gluster it's necessary to specify multiple
volume hosts. Add support for starting qemu with such configurations.

Signed-off-by: Peter Krempa <>

111 min agoqemu: command: Add infrastructure for object specified disk sources
Peter Krempa [Mon, 25 Jul 2016 17:51:18 +0000]
qemu: command: Add infrastructure for object specified disk sources

To allow richer definitions of disk sources add infrastructure that will
allow to register functionst generating a JSON object based definition.

This infrastructure will then convert the definition to the proper
command line syntax and use it in cases where it's necessary. This will
allow to keep legacy definitions for back-compat when possible and use
the new definitions for the configurations requiring them.

111 min agoutil: qemu: Add support for numbered array members
Peter Krempa [Mon, 25 Jul 2016 17:47:40 +0000]
util: qemu: Add support for numbered array members

Add support for converting objects nested in arrays with a numbering
discriminator on the command line. This syntax is used for the
object-based specification of disk source properties.

111 min agostorage: gluster: Support multiple hosts in backend functions
Peter Krempa [Fri, 22 Jul 2016 07:48:51 +0000]
storage: gluster: Support multiple hosts in backend functions

As gluster natively supports multiple hosts for failover reasons we can
easily add the support to the storage driver code in libvirt.

Extract the code setting an individual host into a separate function and
call them in a loop. The new code also tries to keep the debug log
entries sane.

111 min agoqemu: command: Refactor code extracted to qemuBuildDriveSourceStr
Peter Krempa [Mon, 25 Jul 2016 12:33:57 +0000]
qemu: command: Refactor code extracted to qemuBuildDriveSourceStr

Avoid a large block by tweaking the condition skipping empty drives and
split up the switch containing two branches having different purpose.

111 min agoqemu: command: Extract drive source command line formatter
Peter Krempa [Mon, 25 Jul 2016 12:18:50 +0000]
qemu: command: Extract drive source command line formatter

The disk source formatting code grew rather ugly and complex and it will
get worse. Extract it into a separated function to contain the mess.

111 min agoqemu: command: Split out network disk URI building
Peter Krempa [Fri, 22 Jul 2016 08:07:24 +0000]
qemu: command: Split out network disk URI building

Extract the code so that it can be called from multiple places. This
also removes a tricky fallthrough in the large switch in

111 min agoqemu: command: Rename qemuBuildNetworkDriveURI to qemuBuildNetworkDriveStr
Peter Krempa [Fri, 22 Jul 2016 08:01:04 +0000]
qemu: command: Rename qemuBuildNetworkDriveURI to qemuBuildNetworkDriveStr

The function builds also non-uri strings for the various protocols.

2 hours agoutil: storage: Add JSON backing volume parser for 'ssh' protocol
Peter Krempa [Fri, 15 Jul 2016 13:12:10 +0000]
util: storage: Add JSON backing volume parser for 'ssh' protocol

2 hours agoutil: storage: Add 'ssh' network storage protocol
Peter Krempa [Tue, 9 Sep 2014 15:56:04 +0000]
util: storage: Add 'ssh' network storage protocol

Allow using 'ssh' protocol in backing chains and later for disks

2 hours agoutil: storage: Add JSON backing store parser for 'sheepdog' protocol
Peter Krempa [Thu, 14 Jul 2016 11:07:46 +0000]
util: storage: Add JSON backing store parser for 'sheepdog' protocol

2 hours agoutil: storage: Add JSON backing volume parser for 'nbd' protocol
Peter Krempa [Thu, 14 Jul 2016 06:10:31 +0000]
util: storage: Add JSON backing volume parser for 'nbd' protocol

2 hours agoutil: storage: Add json pseudo protocol support for iSCSI volumes
Peter Krempa [Wed, 13 Jul 2016 13:40:33 +0000]
util: storage: Add json pseudo protocol support for iSCSI volumes

iSCSI is a bit odd in this aspect since it only supports URIs but using
the 'filename' property and does not have any alternative syntax.

2 hours agoutil: storage: Add json pseudo protocol support for gluster volumes
Peter Krempa [Wed, 13 Jul 2016 13:35:29 +0000]
util: storage: Add json pseudo protocol support for gluster volumes

Along with the legacy URI based syntax add support for the brand-new
fully object based syntax.

2 hours agoutil: storage: Add support for URI based backing volumes in qemu's JSON pseudo-protocol
Peter Krempa [Tue, 12 Jul 2016 15:59:58 +0000]
util: storage: Add support for URI based backing volumes in qemu's JSON pseudo-protocol

http(s), ftp(s) and tftp use URIs for volume definitions in the JSON
pseudo protocol so it's pretty straightforward to add support for them.

2 hours agoutil: storage: Add support for host device backing specified via JSON
Peter Krempa [Thu, 14 Jul 2016 11:58:26 +0000]
util: storage: Add support for host device backing specified via JSON

JSON pseudo protocol for qemu allows to explicitly specify devices.
Add convertor to the internal type.

2 hours agoutil: storage: Add parser for qemu's json backing pseudo-protocol
Peter Krempa [Fri, 8 Apr 2016 07:55:46 +0000]
util: storage: Add parser for qemu's json backing pseudo-protocol

Add a modular parser that will allow to parse 'json' backing definitions
that are supported by qemu. The initial implementation adds support for
the 'file' driver.

Due to the approach qemu took to implement the JSON backing strings it's
possible to specify them in two approaches.

The object approach:
    json:{ "file" : { "driver":"file",

And a partially flattened approach:

Both of the above are supported by qemu and by the code added in this
commit. The current implementation de-flattens the first level ('file.')
if possible and required. Other handling may be added later but
currently only one level was possible anyways.

2 hours agoutil: json: Make first argument of virJSONValueCopy const
Peter Krempa [Wed, 27 Jul 2016 08:39:23 +0000]
util: json: Make first argument of virJSONValueCopy const

It's just read.

2 hours agoqemu: Adjust the cur_ballon on coldplug/unplug of dimms
Shivaprasad G Bhat [Thu, 21 Jul 2016 10:09:30 +0000]
qemu: Adjust the cur_ballon on coldplug/unplug of dimms

The cur_balloon also increases/decreases with dimm hotplug/unplug.
To be consistent, adjust the value for coldplug too. This was inconsistently
taken care when cur_ballon != memory to begin with. The patch fixes it
irrespective of that.

Signed-off-by: Shivaprasad G Bhat <>
Signed-off-by: Peter Krempa <>

3 hours agovirconf: Fix config file path construction
Erik Skultety [Tue, 26 Jul 2016 12:06:13 +0000]
virconf: Fix config file path construction

Since commit c4bdff19, the path to the configuration file has been constructed
in the following manner:
 - if no config filename was passed to virConfLoadConfigPath, libvirt.conf was
 used as default
 - otherwise the filename was concatenated with
 "<config_dir>/libvirt/libvirt%s%s.conf" which in admin case resulted in
 "libvirt-libvirt-admin.conf.conf". Obviously, this non-existent config led to
 ignoring  all user settings in libvirt-admin.conf. This patch requires the
 config filename to be always provided as an argument with the concatenation
 being simplified.


Signed-off-by: Erik Skultety <>

4 hours agodocs: Add Kimchi as Web Application
Ramon Medeiros [Thu, 14 Jul 2016 18:54:59 +0000]
docs: Add Kimchi as Web Application

Kimchi is a open-source interface to kvm. It runs with HTML5, simple and
easy to manage kvm guests.

Signed-off-by: Ramon Medeiros <>

5 hours agoutil: qemu: Don't generate any extra commas in virQEMUBuildCommandLineJSON
Peter Krempa [Mon, 25 Jul 2016 12:59:19 +0000]
util: qemu: Don't generate any extra commas in virQEMUBuildCommandLineJSON

The function would generate a leading comma. Let the callers properly
add commas by formatting the commas at the end and trimming the trailing

5 hours agoutil: qemu: Allow for different approaches to format JSON arrays
Peter Krempa [Fri, 22 Jul 2016 15:50:03 +0000]
util: qemu: Allow for different approaches to format JSON arrays

For use with memory hotplug virQEMUBuildCommandLineJSONRecurse attempted
to format JSON arrays as bitmap on the command line. Make the formatter
function configurable so that it can be reused with different syntaxes
of arrays such as numbered arrays for use with disk sources.

This patch extracts the code and adds a parameter for the function that
will allow to plug in different formatters.

5 hours agoutil: qemu: Allow nested objects in JSON -> commandline generator
Peter Krempa [Fri, 22 Jul 2016 15:19:28 +0000]
util: qemu: Allow nested objects in JSON -> commandline generator

Move the iterator of objects to the recursive function so that nested
objects are supported by flattening the structure with '.' delimiters.

5 hours agoutil: qemu: Add support for user-passed strings in JSON->commandline
Peter Krempa [Mon, 25 Jul 2016 12:37:47 +0000]
util: qemu: Add support for user-passed strings in JSON->commandline

Until now the JSON->commandline convertor was used only for objects
created by qemu. To allow reusing it with disk formatter we'll need to
escape ',' as usual in qemu commandlines.

5 hours agoutil: qemu: Add wrapper for JSON -> commandline conversion
Peter Krempa [Fri, 22 Jul 2016 13:54:57 +0000]
util: qemu: Add wrapper for JSON -> commandline conversion

Refactor the command line generator by adding a wrapper (with
documentation) that will handle the outermost object iteration.

This patch also renames the functions and tweaks the error message for
nested arrays to be more universal.

The new function is then reused to simplify qemucommandutiltest.

5 hours agoutil: json: Make first argument of virJSONValueObjectForeachKeyValue const
Peter Krempa [Fri, 22 Jul 2016 14:56:37 +0000]
util: json: Make first argument of virJSONValueObjectForeachKeyValue const

The iterator function (second argument) already requires that the object
is handled as 'const' thus we won't modify the object itself.

5 hours agotests: Add testing of backing store string parser
Peter Krempa [Tue, 12 Jul 2016 15:04:16 +0000]
tests: Add testing of backing store string parser

As we already test that the extraction of the backing store string works
well additional tests for the backing store string parser can be made

Export virStorageSourceNewFromBackingAbsolute and use it to parse the
backing store strings, format them using virDomainDiskSourceFormat and
match them against expected XMLs.

5 hours agotests: qemuxml2xml: Avoid crash when processing an XML that fails to parse
Peter Krempa [Mon, 25 Jul 2016 08:33:03 +0000]
tests: qemuxml2xml: Avoid crash when processing an XML that fails to parse

Failure to parse a XML that was not supposed to fail would result into a
crash in the test suite as the vcpu bitmap would not be filled prior to
the active XML->XML test.

Skip formatting of the vcpu snippet in the fake status XML formatter in
such case to avoid the crash. The test would fail anyways.

12 hours agoRemove unnecessary virDomainDefClearDeviceAliases
John Ferlan [Tue, 19 Jul 2016 12:11:01 +0000]
Remove unnecessary virDomainDefClearDeviceAliases

Nothing in the code path after the removed call has needs/uses the alias
anyway (as would be the case for command line building or talking to monitor).
The alias is VIR_FREE'd in virDomainDeviceInfoClear which is called for any
device that needs/uses an alias via virDomainDeviceDefFree or virDomainDefFree
as well as during virDomainDeviceInfoFree for host devices.

For persistent domains, the domain definition (including aliases) gets
freed a few screens later when it's replaced with newDef.

For transient domains, the definition is freed/unref'd along with the
virDomainObj a few moments later.

12 hours agoconf: Remove CCW,PCI clear address helpers
John Ferlan [Tue, 19 Jul 2016 12:06:49 +0000]
conf: Remove CCW,PCI clear address helpers

Since commit id 'fb06350' these are no longer called, so remove them

15 hours agolibxl: implement virDomainBlockStats
Joao Martins [Mon, 25 Jul 2016 23:45:14 +0000]
libxl: implement virDomainBlockStats

Introduce initial support for domainBlockStats API call that
allow us to query block device statistics. OpenStack nova
uses this API call to query block statistics, alongside
virDomainMemoryStats and virDomainInterfaceStats.  Note that
this patch only introduces it for VBD for starters. QDisk
would come in a separate patch series.

A new statistics data structure is introduced to fit common
statistics among others specific to the underlying block
backends. For the VBD statistics on linux these are exported
via sysfs on the path:


To calculate the block devno libxlDiskPathToID is introduced.
Each backend implements its own function to extract statistics,
allowing support for multiple backends and different platforms.

VBD stats are exposed in reqs and number of sectors from
blkback, and it's up to us to convert it to sector sizes.
The sector size is gathered through xenstore in the device
backend entry "physical-sector-size".

BlockStatsFlags variant is also implemented which has the
added benefit of getting the number of flush requests.

Signed-off-by: Joao Martins <>

16 hours agoqemu: rename QEMU_CAPS_MLOCK to QEMU_CAPS_REALTIME_MLOCK
Henning Schild [Mon, 25 Jul 2016 12:44:16 +0000]

Purely cosmetic change to be consistent with the other names.

Signed-off-by: Henning Schild <>

19 hours agoconf: events: handle NULL uuid
Jovanka Gulicoska [Tue, 19 Jul 2016 17:23:06 +0000]
conf: events: handle NULL uuid

Not all objects have a uuid, such as nodedevs. When we add events
support for them, NULL will be passed here, so handle it.

20 hours agonetwork: Added hook for network modification event
Anton Khramov [Wed, 13 Jul 2016 11:06:05 +0000]
network: Added hook for network modification event


21 hours agoqemu: expand domain memory statistics with 'last-update' timestamp
Derbyshev Dmitry [Wed, 1 Jun 2016 17:07:07 +0000]
qemu: expand domain memory statistics with 'last-update' timestamp

QEMU reports timestamp along with other memory statistics, but this information is not saved into domain statistics.
It could be useful to determine if the data reported is fresh or not.
Balloon statistics are not reported in hrf, so no modifications are made in qemu_monitor_text.c.

Signed-off-by: Derbyshev Dmitry <>

21 hours agoqemu: expand domain memory statistics with 'usable'
Derbyshev Dmitry [Wed, 1 Jun 2016 17:07:06 +0000]
qemu: expand domain memory statistics with 'usable'

'memtotal' in virtio drivers and qemu corresponds to 'available' in libvirt.
Because of that, 'stat-available-memory' is renamed into 'usable'.
Balloon statistics are not reported in hrf, so no modifications are made in qemu_monitor_text.c.

Signed-off-by: Derbyshev Dmitry <>

26 hours agoqemu: remove ccwaddrs caching
Tomasz Flendrich [Sat, 23 Jul 2016 01:47:11 +0000]
qemu: remove ccwaddrs caching

Dropping the caching of ccw address set.
The cached set is not required anymore, because the set is now being
recalculated from the domain definition on demand, so the cache
can be deleted.

26 hours agoqemu_hotplug: generate ccw address list on demand
Tomasz Flendrich [Sat, 23 Jul 2016 01:47:10 +0000]
qemu_hotplug: generate ccw address list on demand

Dropping the caching of ccw address set.
Instead of using the cached address set, functions in qemu_hotplug.c
now recalculate it on demand.

26 hours agoAdd qemuDomainCCWAddrSetCreateFromDomain
Tomasz Flendrich [Sat, 23 Jul 2016 01:47:09 +0000]
Add qemuDomainCCWAddrSetCreateFromDomain

The address sets (pci, ccw, virtio serial) are currently cached
in qemu private data, but all the information required to recreate
these sets is in the domain definition. Therefore I am removing
the redundant data and adding a way to recalculate these sets.

Add a function that calculates the ccw address set
from the domain definition.

26 hours agoqemu: remove vioserialaddrs caching
Tomasz Flendrich [Sat, 23 Jul 2016 01:47:08 +0000]
qemu: remove vioserialaddrs caching

Dropping the caching of virtio serial address set.
The cached set is not required anymore, because the set is now being
recalculated from the domain definition on demand, so the cache
can be deleted.

Credit goes to Cole Robinson.

26 hours agoqemu_hotplug: generate vioserial address list on demand
Tomasz Flendrich [Sat, 23 Jul 2016 01:47:07 +0000]
qemu_hotplug: generate vioserial address list on demand

Dropping the caching of virtio serial address set.
Instead of using the cached address set, a function in qemu_hotplug.c
now recalculates it on demand.

Credit goes to Cole Robinson.

26 hours agoadd virDomainVirtioSerialAddrSetCreateFromDomain
Tomasz Flendrich [Sat, 23 Jul 2016 01:47:06 +0000]
add virDomainVirtioSerialAddrSetCreateFromDomain

The address sets (pci, ccw, virtio serial) are currently cached
in qemu private data, but all the information required to recreate
these sets is in the domain definition. Therefore I am removing
the redundant data and adding a way to recalculate these sets.

Add a function that calculates the virtio serial address set
from the domain definition.

Credit goes to Cole Robinson.

28 hours agocgroup: drop INSERT_ELEMENT usage virCgroupPartitionEscape
Ján Tomko [Tue, 14 Jun 2016 06:02:30 +0000]
cgroup: drop INSERT_ELEMENT usage virCgroupPartitionEscape

Use virAsprintf to prepend an underscore to make the code more

35 hours agoutil: systemd: Define MSG_NOSIGNAL if needed
Andrea Bolognani [Wed, 20 Jul 2016 13:46:56 +0000]
util: systemd: Define MSG_NOSIGNAL if needed

The symbol being missing has been reported as causing build
failures on OS X. If it's not already defined, define it to
zero so that it won't have any effect.

46 hours agoqemu_monitor: search memballoon QOM device path using alias
Pavel Hrdina [Mon, 25 Jul 2016 15:07:38 +0000]
qemu_monitor: search memballoon QOM device path using alias

Commit 4a585a88 introduced searching QOM device path by alias, let's use it for
memballoon too.  This may speedup the search because in most cases we will find
the correct QOM device path directly by using alias without the need for the
recursion code.

Signed-off-by: Pavel Hrdina <>

47 hours agoqemu_monitor_json: add support to search QOM device path by device alias
Pavel Hrdina [Mon, 25 Jul 2016 08:47:00 +0000]
qemu_monitor_json: add support to search QOM device path by device alias

Commit ce745914 introduced detection of actual video ram sizes to fix migration
if QEMU decide to modify the values provided by libvirt.  This works perfectly
for domains with number of video devices up to two.

If there are more than two video devices in the guest all the secondary devices
in the XML will have the same memory values.  This is because our current code
search for QOM device path only by the device type name and all the secondary
video devices has the same name "qxl".

This patch introduces a new search function that will try to search a QOM device
path using also device's alias if the alias is available. After that it will
fallback to the old recursive code if the alias search found no results.


Signed-off-by: Pavel Hrdina <>

2 days agoSplit qemuDomainDetachDeviceFlags in two
Tomasz Flendrich [Sat, 16 Jul 2016 00:42:50 +0000]
Split qemuDomainDetachDeviceFlags in two

Previously, qemuDomainDetachDeviceFlags was doing two things:
handling the job and detaching devices. Now the second part is
in a new function.

2 days agoNarrow down a parameter in qemuDomainDetachDeviceFlags
Tomasz Flendrich [Sat, 16 Jul 2016 00:42:49 +0000]
Narrow down a parameter in qemuDomainDetachDeviceFlags

This will make splitting up qemuDomainDetachDeviceFlags into two
functions easier.

Signed-off-by: Martin Kletzander <>

2 days agoSplit qemuDomainAttachDeviceFlags in two
Tomasz Flendrich [Sat, 16 Jul 2016 00:42:48 +0000]
Split qemuDomainAttachDeviceFlags in two

Previously, qemuDomainAttachDeviceFlags was doing two things:
handling the job and attaching devices. Now the second part is
in a new function.

This change is required to make it possible to test more complex
device attachment situations, like attaching a device to both
config and live at once.

2 days agoqemu: Remove an unnecessary variables
Tomasz Flendrich [Sat, 16 Jul 2016 00:42:47 +0000]
qemu: Remove an unnecessary variables

qemuCaps is no longer used anywhere in these functions,
so it can be deleted.

2 days agoChange parameters to qemuDomainAttachDeviceLive
Tomasz Flendrich [Sat, 16 Jul 2016 00:42:46 +0000]
Change parameters to qemuDomainAttachDeviceLive

We want to be able to pass a NULL instead of the connection
and use this function in tests. To achieve this, the virConnectPtr
is passed instead of virDomainPtr, and the driver is a new separate

Signed-off-by: Martin Kletzander <>

2 days agoqemuhotplugtest: Add tests for ccw devices
Tomasz Flendrich [Fri, 22 Jul 2016 18:10:47 +0000]
qemuhotplugtest: Add tests for ccw devices

There's a plan to rework the address handling, so testcases
that verify hotplugging ccw devices will help in avoiding

In this commit, some files are duplicated because of the way
qemuhotplug.c calculates the expected xml filenames.
I plan on changing that to explicitly stating the basis domain
xml, the device xml, and the expected xml.

3 days agolxc: Don't crash by forgetting to ref transient domains
Martin Kletzander [Wed, 20 Jul 2016 07:23:03 +0000]
lxc: Don't crash by forgetting to ref transient domains

So commit 306b3a8504 tried mimicking behaviour of commit 540c339a25, but
added a virObjectRef(vm) only after virDomainObjListAdd() in
lxcDomainDefineXMLFlags() and not in lxcDomainCreateXMLWithFiles().
That way undefining a domain that was started with different XML than
defined will leave the domain object in a state with not enough
references to then remove it.  Hence any lxcDomainDestroyFlags() called
afterwards crashes the daemon.


Signed-off-by: Martin Kletzander <>

5 days agovirt-aa-helper: Make help output match option name
Guido Günther [Fri, 22 Jul 2016 10:09:09 +0000]
virt-aa-helper: Make help output match option name

5 days agoqemu: hotplug: fix changeable media ejection
Bjoern Walk [Fri, 8 Jul 2016 10:30:26 +0000]
qemu: hotplug: fix changeable media ejection

Since return code is checked globally at the end of the function, let's
make sure that we set it correctly at any point.

This fixes a regression introduced in commit 0aa19f35 where the first
command to eject changeable media would fail unconditionally.

Signed-off-by: Bjoern Walk <>
Reviewed-by: Boris Fiuczynski <>

5 days agolxc: make container's init process session leader
Katerina Koukiou [Thu, 21 Jul 2016 15:37:24 +0000]
lxc: make container's init process session leader

This patch forces container's init process, to become a session leader,
that is its session ID is made the same as its process ID.
That might seem unnecessary in general, but if we want to checkpoint a
container with CRIU, which is needed for container migration,
we must ensure that the SID of each process inside the container points
to a process that lives in the same PID namespace as the container.
Therefore, we force that the session leader is the init.

Signed-off-by: Katerina Koukiou <>

6 days agoAuto-add one hub if there are too many USB devices
Ján Tomko [Fri, 17 Jun 2016 07:49:54 +0000]
Auto-add one hub if there are too many USB devices

When parsing a command line with USB devices that have
no address specified, QEMU automatically adds a USB hub
if the device would fill up all the available USB ports.

To help most of the users, add one hub if there are more
USB devices than available ports. For wilder configurations,
expect the user to provide us with more hubs and/or controllers.

6 days agoAssign addresses on USB device hotplug
Ján Tomko [Wed, 12 Aug 2015 14:52:19 +0000]
Assign addresses on USB device hotplug

USB disks, redirected devices, host devices and serial devices
are supported.

6 days agoAssign addresses to USB devices
Ján Tomko [Wed, 12 Aug 2015 14:52:18 +0000]
Assign addresses to USB devices

Automatically assign addresses to USB devices.

Just like reserving, this is only done for newly defined domains.

6 days agoAdd tests for USB address assignment
Ján Tomko [Mon, 18 Jul 2016 15:16:33 +0000]
Add tests for USB address assignment

Introduce tests with the ich9, xhci and the default (piix3) usb
controller to demonstrate the effect of the next patch.

6 days agoReserve existing USB addresses
Ján Tomko [Wed, 12 Aug 2015 14:52:17 +0000]
Reserve existing USB addresses

Check if they fit on the USB controllers the domain has,
and error out if two devices try to use the same address.

6 days agoAdd functions for adding USB hubs to addrs
Ján Tomko [Wed, 27 Apr 2016 13:54:14 +0000]
Add functions for adding USB hubs to addrs

Walk through all the usb hubs in the domain definition
that have a USB address specified, create the
corresponding structures in the virDomainUSBAddressSet
and mark the port it occupies as used.

6 days agoAdd functions for adding USB controllers to addrs
Ján Tomko [Wed, 12 Aug 2015 14:52:16 +0000]
Add functions for adding USB controllers to addrs

Walk through all the usb controllers in the domain definition
and create the corresponding structures in the virDomainUSBAddressSet.

6 days agoIntroduce virDomainUSBAddressSet
Ján Tomko [Wed, 12 Aug 2015 14:52:15 +0000]
Introduce virDomainUSBAddressSet

A new type to track USB addresses.

Every <controller type='usb' index='i'/> is represented by an
object of type virDomainUSBAddressHub located at buses[i].

Each of these hubs has up to 'nports' ports.
If a port is occupied, it has the corresponding bit set in
the 'ports' bitmap, e.g. port 1 would have the 0th bit set.
If there is a hub on this port, then hubs[i] will point
to this hub.

6 days agovz: handle gracefully races on undefining domain
Nikolay Shirokovskiy [Wed, 20 Jul 2016 15:00:34 +0000]
vz: handle gracefully races on undefining domain

Undefine procedure drops domain lock while waiting for detaching
disks vz sdk call. Meanwhile vz sdk event domain-config-changed
arrives, its handler finds domain and is blocked waiting for job
condition. After undefine API call finishes event processing procedes
and tries to refreshes domain config thru existing vz sdk domain handle.
Domain does not exists anymore and event processing fails. Everything
is fine we just don't want to see error message in log for this
particular case.

Fortunately domain has flag that domain is removed from list. This
also imply that vz sdk domain is also undefined. Thus if we check
for this flag right after domain is locked again on accuiring
job condition we gracefully handle this situation.

Actually the race can happen in other situations too. Any
time we wait for job condition in mutualy exclusive job in
time when we acquire it vz sdk domain can cease to exist.
So instead of general internal error we can return domain
not found which is easier to handle. We don't need to patch
other places in mutually exclusive jobs where domain lock
is dropped as if job is started domain can't be undefine
by mutually exclusive undefine job.

The code of this patch is quite similar to qemu driver checks
for is domain is active after acquiring a job. The difference
only while qemu domain is operational while process is active
vz domain is operational while domain exists.

6 days agovz: make vz driver more responsive
Nikolay Shirokovskiy [Wed, 20 Jul 2016 15:00:33 +0000]
vz: make vz driver more responsive

Current vz driver implementation is not usable when it comes to
long runnig operations. Migration or saving a domain blocks all
other operations even query ones which are expecteted to be available.
This patch addresses this problem.

All vz driver API calls fall into next 3 groups:
1. only query domain cache (virDomainObj, vz cache statistic)
   examples are vzDomainGetState, vzDomainGetXMLDesc etc.
2. use thread shared sdkdom object
   examples are vzDomainSetMemoryFlags, vzDomainAttachDevice etc.
3. use no thread shared sdkdom object nor domain cache
   examples are vzDomainSnapshotListNames, vzDomainSnapshotGetXMLDesc etc

API calls from group 1 don't need to be changed as they hold domain lock only
for short period of time. These calls [1] are easily distinguished. They query
domain object thru libvirt common code or query vz sdk statistics handle thru
vz sdk sync operations.

vzDomainInterfaceStats is the only exception. It uses sdkdom object to
convert interface name to its vz sdk stack index which could not be saved in
domain cache. Interface statistics is available thru this stack index as a key
rather than name. As a result we can have accidental 'not known interface'
errors on quering intrerface stats. The reason is that in the process of
updating domain configuration we drop all devices and then recreate them again
in sdkdom object and domain lock can be dropped meanwhile (to remove networks
for existing bridged interfaces and(or) (re)create new ones). We can fix this
by changing the way we support bridged interfaces or by reordering operations
and changing bridged networks beforehand. Anyway this is better than moving
this API call into 2 group and making it an exclusive job.

As to API calls from group 2, first thread shared sdkdom object needs to be
explained. vz sdk has only one handle for a given domain, thus threads need
exclusive access to operate on it. These calls are fixed to drop and reacquire
domain lock on any lengthy operations - namely waiting the result of async vz
sdk operation. As lock is dropped we need to take extra reference to domain
object if it is not taken already as domain object can be deleted from list
while lock is dropped. As this operations use thread shared sdkdom object, the
simplest way to make calls from group 2 be consistent to each other is to make
them mutually exclusive. This is done by taking/releasing job condition thru
calling correspondent job routine. This approach makes group 1 and group
2 calls consistent to each other too. Not all calls of group 2 change the
domain cache but those that do update it thru prlsdkUpdateDomain which holds
the lock thoughout the update.

API calls from group [2] are easily distinguished too. They use
beginEdit/commit to change domain configuration (vzDomainSetMemoryFlags) or/and
update domain cache from sdkdom at the end of operation (vzDomainSuspend).

There is a known issue however. Frankly speaking it was introduced by ealier
patch '[PATCH 6/9] vz: cleanup loading domain code' from a different series.
The patch significantly reduced amount of time when the driver lock is held when
creating domain from API call or as a result of domain added event from vz sdk.
The problem is these two paths race on using thread shared sdkdom as we don't
have libvirt domain object and can not lock on it. However this don't
invalidates the patch as we can't use the former approach of preadding domain
into the list as we need name at least and name is not given by event. Anyway
i'm against adding half baked object into the list. Eventually this race can be
fixed by extra measures. As to current situation races with different
configurations are unlikely and race when adding domain thru vz driver and
simultaneous event from vz sdk is not dangerous as configuration is the same.

The last group [3] is API calls that need only sdkdom object to make vz sdk
call and don't change thread shared sdkdom object or domain cache in any way.
For now these are mostly domain snapshot API calls. The changes are similar to
those of group 2 - they add extra reference and drop/reacquire the lock on waiting
vz async call result. One can simply take the immutable sdkdom object from the
cache and drop the lock for the rest of operations but the chosen approach
makes implementation of these API calls somewhat similar to those of from group
2 and thus a bit futureproof. As calls of group 3 don't need vz driver
domain/vz sdk cache in any way, they are consistent with respect to API calls from
groups 1 and 3.

There is another exception. Calls to make-snapshot/revert-to-snapshot/migrate
are moved to group 2. That is they are made mutually exclusive. The reason
is that libvirt API supports control/query only for one job per domain and
these are jobs that are likely to be queried/aborted.


[1] API calls that only query domain cache.
(marked [*] are included for a different reason)

.domainLookupByID = vzDomainLookupByID,    /* 0.10.0 */
.domainLookupByUUID = vzDomainLookupByUUID,        /* 0.10.0 */
.domainLookupByName = vzDomainLookupByName,        /* 0.10.0 */
.domainGetOSType = vzDomainGetOSType,    /* 0.10.0 */
.domainGetInfo = vzDomainGetInfo,  /* 0.10.0 */
.domainGetState = vzDomainGetState,        /* 0.10.0 */
.domainGetXMLDesc = vzDomainGetXMLDesc,    /* 0.10.0 */
.domainIsPersistent = vzDomainIsPersistent,        /* 0.10.0 */
.domainGetAutostart = vzDomainGetAutostart,        /* 0.10.0 */
.domainGetVcpus = vzDomainGetVcpus, /* 1.2.6 */
.domainIsActive = vzDomainIsActive, /* 1.2.10 */
.domainIsUpdated = vzDomainIsUpdated,     /* 1.2.21 */
.domainGetVcpusFlags = vzDomainGetVcpusFlags, /* 1.2.21 */
.domainGetMaxVcpus = vzDomainGetMaxVcpus, /* 1.2.21 */
.domainHasManagedSaveImage = vzDomainHasManagedSaveImage, /* 1.2.13 */
.domainGetMaxMemory = vzDomainGetMaxMemory, /* 1.2.15 */
.domainBlockStats = vzDomainBlockStats, /* 1.2.17 */
.domainBlockStatsFlags = vzDomainBlockStatsFlags, /* 1.2.17 */
.domainInterfaceStats = vzDomainInterfaceStats, /* 1.2.17 */                   [*]
.domainMemoryStats = vzDomainMemoryStats, /* 1.2.17 */
.domainMigrateBegin3Params = vzDomainMigrateBegin3Params, /* 1.3.5 */
.domainMigrateConfirm3Params = vzDomainMigrateConfirm3Params, /* 1.3.5 */

[2] API calls that use thread shared sdkdom object
(marked [*] are included for a different reason)

.domainSuspend = vzDomainSuspend,    /* 0.10.0 */
.domainResume = vzDomainResume,    /* 0.10.0 */
.domainDestroy = vzDomainDestroy,  /* 0.10.0 */
.domainShutdown = vzDomainShutdown, /* 0.10.0 */
.domainCreate = vzDomainCreate,    /* 0.10.0 */
.domainCreateWithFlags = vzDomainCreateWithFlags, /* 1.2.10 */
.domainReboot = vzDomainReboot, /* 1.3.0 */
.domainDefineXML = vzDomainDefineXML,      /* 0.10.0 */
.domainDefineXMLFlags = vzDomainDefineXMLFlags, /* 1.2.12 */ (update part)
.domainUndefine = vzDomainUndefine, /* 1.2.10 */
.domainAttachDevice = vzDomainAttachDevice, /* 1.2.15 */
.domainAttachDeviceFlags = vzDomainAttachDeviceFlags, /* 1.2.15 */
.domainDetachDevice = vzDomainDetachDevice, /* 1.2.15 */
.domainDetachDeviceFlags = vzDomainDetachDeviceFlags, /* 1.2.15 */
.domainSetUserPassword = vzDomainSetUserPassword, /* 1.3.6 */
.domainManagedSave = vzDomainManagedSave, /* 1.2.14 */
.domainSetMemoryFlags = vzDomainSetMemoryFlags, /* 1.3.4 */
.domainSetMemory = vzDomainSetMemory, /* 1.3.4 */
.domainRevertToSnapshot = vzDomainRevertToSnapshot, /* 1.3.5 */                  [*]
.domainSnapshotCreateXML = vzDomainSnapshotCreateXML, /* 1.3.5 */                [*]
.domainMigratePerform3Params = vzDomainMigratePerform3Params, /* 1.3.5 */        [*]
.domainUpdateDeviceFlags = vzDomainUpdateDeviceFlags, /* 2.0.0 */

[3] API calls that do not use thread shared sdkdom object

.domainManagedSaveRemove = vzDomainManagedSaveRemove, /* 1.2.14 */
.domainSnapshotNum = vzDomainSnapshotNum, /* 1.3.5 */
.domainSnapshotListNames = vzDomainSnapshotListNames, /* 1.3.5 */
.domainListAllSnapshots = vzDomainListAllSnapshots, /* 1.3.5 */
.domainSnapshotGetXMLDesc = vzDomainSnapshotGetXMLDesc, /* 1.3.5 */
.domainSnapshotNumChildren = vzDomainSnapshotNumChildren, /* 1.3.5 */
.domainSnapshotListChildrenNames = vzDomainSnapshotListChildrenNames, /* 1.3.5 */
.domainSnapshotListAllChildren = vzDomainSnapshotListAllChildren, /* 1.3.5 */
.domainSnapshotLookupByName = vzDomainSnapshotLookupByName, /* 1.3.5 */
.domainHasCurrentSnapshot = vzDomainHasCurrentSnapshot, /* 1.3.5 */
.domainSnapshotGetParent = vzDomainSnapshotGetParent, /* 1.3.5 */
.domainSnapshotCurrent = vzDomainSnapshotCurrent, /* 1.3.5 */
.domainSnapshotIsCurrent = vzDomainSnapshotIsCurrent, /* 1.3.5 */
.domainSnapshotHasMetadata = vzDomainSnapshotHasMetadata, /* 1.3.5 */
.domainSnapshotDelete = vzDomainSnapshotDelete, /* 1.3.5 */

[4] Known issues.

1. accidental errors on getting network statistics
2. race with simultaneous use of thread shared domain object on paths
 of adding domain thru API and adding domain on vz sdk domain added event.

6 days agovz: keep naming convention for domain objects
Nikolay Shirokovskiy [Wed, 20 Jul 2016 15:00:32 +0000]
vz: keep naming convention for domain objects

see 4385b868

6 days agovz: remove redundant variable in prlsdkHandleVmAddedEvent
Nikolay Shirokovskiy [Wed, 20 Jul 2016 15:00:31 +0000]
vz: remove redundant variable in prlsdkHandleVmAddedEvent

6 days agovz: use state variable sdkdom in prlsdkApplyConfig
Nikolay Shirokovskiy [Wed, 20 Jul 2016 15:00:30 +0000]
vz: use state variable sdkdom in prlsdkApplyConfig

sdk domain handle is unique per connection so there is
no sense to query it again if we have it in vzDomObjPtr.
Side effect of prlsdkSdkDomainLookupByUUID is refreshing
domain config is of no use too as PrlVm_BeginEdit do it too.

7 days agostorage: Add extra failure condition for luks volume creation
John Ferlan [Tue, 19 Jul 2016 17:54:55 +0000]
storage: Add extra failure condition for luks volume creation

Commit id '5e46d7d6' did not take into account that usage of a luks
volume will require usage of the master key encrypted passphrase for
a QEMU environment.  So rather than allow creation of something that
won't be usable, just fail the creation.

7 days agoqemu: Disallow usage of luks encryption if aes secret not possible
John Ferlan [Tue, 19 Jul 2016 17:40:41 +0000]
qemu: Disallow usage of luks encryption if aes secret not possible

Resolves a CI test integration failure with a RHEL6/Centos6 environment.

In order to use a LUKS encrypted device, the design decision was to
generate an encrypted secret based on the master key. However, commit
id 'da86c6c' missed checking for that specifically.

When qemuDomainSecretSetup was implemented, a design decision was made
to "fall back" to a plain text secret setup if the specific cipher was
not available (e.g. virCryptoHaveCipher(VIR_CRYPTO_CIPHER_AES256CBC))
as well as the QEMU_CAPS_OBJECT_SECRET. For the luks encryption setup
there is no fall back to the plaintext secret, thus if that gets set
up by qemuDomainSecretSetup, then we need to fail.

Also, while the qemuxml2argvtest has set the QEMU_CAPS_OBJECT_SECRET
bit, it didn't take into account the second requirement that the
ability to generate the encrypted secret is possible. So modify the
test to not attempt to run the luks-disk if we know we don't have
the encryption algorithm.

7 days agostorage: Fix error path
John Ferlan [Tue, 19 Jul 2016 17:25:58 +0000]
storage: Fix error path

virStorageBackendCreateQemuImgCheckEncryption didn't return -1 if there
were no secrets.

7 days agoqemu: Move setting of encobjAdded for qemuDomainAttachSCSIDisk
John Ferlan [Tue, 19 Jul 2016 14:50:40 +0000]
qemu: Move setting of encobjAdded for qemuDomainAttachSCSIDisk

A post push realization that the boolean should be set inside the condition

7 days agoqemu: Move setting of obj bools for qemuDomainAttachVirtioDiskDevice
John Ferlan [Tue, 19 Jul 2016 14:48:10 +0000]
qemu: Move setting of obj bools for qemuDomainAttachVirtioDiskDevice

A post push realization that the setting of the boolean needed to be
inside the if condition.

7 days agohvsupport: skip non-matching lines early
Ján Tomko [Tue, 28 Jun 2016 13:23:58 +0000]
hvsupport: skip non-matching lines early

Most of the lines we look at are not going to match one of the
driver types contained in $groups_regex.

Move on to the next line if it does not contain any of them early.
This speeds up the script execution by 50%, since this simple regex
does not have any capture groups.

7 days agohvsupport: construct the group regex upfront
Ján Tomko [Tue, 28 Jun 2016 13:16:01 +0000]
hvsupport: construct the group regex upfront

The %groups hash contains all the driver types (e.g.
virHypervisorDriver or virSecretDriver).

When searching for all the APIs that are implemented by a driver
of that specific driver type, we keep iterating over the %groups
hash on every line we look at, then matching against the driver type.

This is inefficient because it prevents perl from caching the regex
and it executes the regex once for every driver type, even though
one regex matching excludes all the others, since all the driver types
are different.

Construct the regex containing all the driver types upfront to save
about 6.4s (~98%) of the script execution time.

7 days agohvsupport: use a regex instead of XML::XPath
Ján Tomko [Tue, 28 Jun 2016 11:28:48 +0000]
hvsupport: use a regex instead of XML::XPath

When generating the file, we parse the -api.xml
files generated by to know in which HTML file the API
function is.

Doing an XPath query for every single 'function' element in the
file is inefficient.

Since the XML file is generated by another of our build scripts
(, using Python's standard 'output.write' XML library),
just find the function name->file mapping by a regex upfront.

Also add a note about this next to the line that generates it
in and do not check if XML::XPath is installed in
bootstrap since we no longer use it.

7 days agolxc: errors after the handshake won't be reported
Cédric Bosdonnat [Tue, 19 Jul 2016 14:23:25 +0000]
lxc: errors after the handshake won't be reported

Any error happening after the hand shake in the lxc controller
will not result in a failure as errors are checked during the handshake.
Move the handshake after the last possible error.

7 days agovirt-aa-helper: better write denials handling
Cédric Bosdonnat [Mon, 18 Jan 2016 10:22:32 +0000]
virt-aa-helper: better write denials handling

Better fix replacing c726af2d: introducing an 'R' permission to
add read rule, but no explicit deny write rule.

7 days agoqemu: Add luks support for domain disk
John Ferlan [Thu, 2 Jun 2016 20:28:28 +0000]
qemu: Add luks support for domain disk


Generate the luks command line using the AES secret key to encrypt the
luks secret. A luks secret object will be in addition to a an AES secret.

For hotplug, check if the encinfo exists and if so, add the AES secret
for the passphrase for the secret object used to decrypt the device.

Modify/augment the fakeSecret* in qemuxml2argvtest in order to handle
find a uuid or a volume usage with a specific path prefix in the XML
(corresponds to the already generated XML tests). Add error message
when the 'usageID' is not 'mycluster_myname'. Commit id '1d632c39'
altered the error message generation to rely on the errors from the
secret_driver (or it's faked replacement).

Add the .args output for adding the LUKS disk to the domain

Signed-off-by: John Ferlan <>

7 days agoqemu: Alter the qemuDomainGetSecretAESAlias to add new arg
John Ferlan [Fri, 24 Jun 2016 19:31:57 +0000]
qemu: Alter the qemuDomainGetSecretAESAlias to add new arg

Soon we will be adding luks encryption support. Since a volume could require
both a luks secret and a secret to give to the server to use of the device,
alter the alias generation to create a slightly different alias so that
we don't have two objects with the same alias.

Signed-off-by: John Ferlan <>

7 days agoqemu: Add secinfo for hotplug virtio disk
John Ferlan [Wed, 22 Jun 2016 11:07:49 +0000]
qemu: Add secinfo for hotplug virtio disk

Commit id 'a1344f70a' added AES secret processing for RBD when starting
up a guest. As such, when the hotplug code calls qemuDomainSecretDiskPrepare
an AES secret could be added to the disk about to be hotplugged. If an AES
secret was added, then the hotplug code would need to generate the secret
object because qemuBuildDriveStr would add the "password-secret=" to the
returned 'driveStr' rather than the base64 encoded password.

Signed-off-by: John Ferlan <>

7 days agostorage: Add support to create a luks volume
John Ferlan [Thu, 2 Jun 2016 15:33:47 +0000]
storage: Add support to create a luks volume

Partially resolves:

If the volume xml was looking to create a luks volume take the necessary
steps in order to make that happen.

The processing will be:
 1. create a temporary file (virStorageBackendCreateQemuImgSecretPath)
   1a. use the storage driver state dir path that uses the pool and
       volume name as a base.

 2. create a secret object (virStorageBackendCreateQemuImgSecretObject)
   2a. use an alias combinding the volume name and "_luks0"
   2b. add the file to the object

 3. create/add luks options to the commandline (virQEMUBuildLuksOpts)
   3a. at the very least a "key-secret=%s" using the secret object alias
   3b. if found in the XML the various "cipher" and "ivgen" options

Signed-off-by: John Ferlan <>

8 days agovsh: Properly initialize res
John Ferlan [Mon, 18 Jul 2016 18:37:38 +0000]
vsh: Properly initialize res

The 'res' variable was only being initialized to NULL in the
if (!state) path; however, that path never used res and evenutally
res is assigned one of two results based on a pair of if then else if
conditions. If for some reason neither of those paths was taken and
the (!state) path wasn't taken, then 'res' would be indeterminate.

Found by Coverity, probably a false positive based on code paths, but
better safe than sorry for the future.

Signed-off-by: John Ferlan <>

8 days agoconf: Need to check for glisten before accessing
John Ferlan [Mon, 18 Jul 2016 18:30:59 +0000]
conf: Need to check for glisten before accessing

When formatting the graphics data for TYPE_SPICE, check if the glisten
is NULL before blindly referencing

Found by Coverity

Signed-off-by: John Ferlan <>

8 days agotests: Need to check return of virGetLastError
John Ferlan [Mon, 18 Jul 2016 18:25:43 +0000]
tests: Need to check return of virGetLastError

Cannot assume virGetLastError returns non-NULL value - modify the code to
fetch err and check if err && err->code

Found by Coverity

Signed-off-by: John Ferlan <>

8 days agotools: Fix comparison in virLoginShellGetShellArgv
John Ferlan [Mon, 18 Jul 2016 18:07:42 +0000]
tools: Fix comparison in virLoginShellGetShellArgv

Commit id '740e4d70' altered the logic to fetch the sysconf values and
added a new virConfGetValueStringList which returns -1 on failure, 0 if
missing, and 1 if the value was present.

However, the caller only checked !shargv which caught Coverity's attention
since the following VIR_ALLOC_N(*shargv, 2) would be a NULL ptr deref

Signed-off-by: John Ferlan <>

8 days agoutil: Fix incorrect VIR_FREE in virConfGetValueStringList
John Ferlan [Mon, 18 Jul 2016 17:58:52 +0000]
util: Fix incorrect VIR_FREE in virConfGetValueStringList

Since we VIR_ALLOC_N to *values, the VIR_FREE should be done likewise

Signed-off-by: John Ferlan <>

8 days agovirt-admin: Output srv-threadpool-info data as unsigned int rather than signed
Erik Skultety [Mon, 18 Jul 2016 08:45:17 +0000]
virt-admin: Output srv-threadpool-info data as unsigned int rather than signed

Internally, all the data are represented as unsigned int, it is also documented
in the header file that users should use our exported constants that also
indicate that the data should be unsigned int. However, when polling for the
current server threadpool's configuration, virt-admin uses an incorrect
formatting parameter '%d' for printf. Instead, virt-admin should use formatting
parameter '%u'.


Signed-off-by: Erik Skultety <>

8 days agoqemu: Move and rename qemuBufferEscapeComma
John Ferlan [Fri, 15 Jul 2016 11:02:05 +0000]
qemu: Move and rename qemuBufferEscapeComma

Move to virqemu and rename to virQEMUBuildBufferEscapeComma. This can then
be shared by the storage driver when it builds the command line for qemuimg

8 days agoqemu: Alter error path cleanup for qemuDomainAttachMemory
John Ferlan [Fri, 15 Jul 2016 11:27:48 +0000]
qemu: Alter error path cleanup for qemuDomainAttachMemory

A recent adjustment to qemuDomainAttachRNGDevice to properly cleanup
the props object after a qemuMonitorAddObject also would affect this
code. Alter the cleanup to be similar to RNG changes.

8 days agoqemu: Alter error path cleanup for qemuDomainAttachRNGDevice
John Ferlan [Thu, 14 Jul 2016 22:13:50 +0000]
qemu: Alter error path cleanup for qemuDomainAttachRNGDevice

Based on recent review comment - rather than have a spate of goto failxxxx,
change to a boolean based model. Ensures that the original error can be
preserved and cleanup is a bit more orderly if more objects are added.

8 days agoqemu: Alter error path cleanup for qemuDomainAttachChrDevice
John Ferlan [Thu, 14 Jul 2016 21:55:05 +0000]
qemu: Alter error path cleanup for qemuDomainAttachChrDevice

Based on recent review comment - rather than have a spate of goto failxxxx,
change to a boolean based model. Ensures that the original error can be
preserved and cleanup is a bit more orderly if more objects are added.

8 days agoqemu: Alter error path cleanup for qemuDomainAttachSCSIDisk
John Ferlan [Thu, 14 Jul 2016 21:47:13 +0000]
qemu: Alter error path cleanup for qemuDomainAttachSCSIDisk

Based on recent review comment - rather than have a spate of goto failxxxx,
change to a boolean based model. Ensures that the original error can be
preserved and cleanup is a bit more orderly if more objects are added.

8 days agoqemu: Alter error path cleanup for qemuDomainAttachVirtioDiskDevice
John Ferlan [Thu, 14 Jul 2016 21:28:53 +0000]
qemu: Alter error path cleanup for qemuDomainAttachVirtioDiskDevice

Based on recent review comment - rather than have a spate of goto failxxxx,
change to a boolean based model. Ensures that the original error can be
preserved and cleanup is a bit more orderly if more objects are added.

8 days agoqemu: Alter error path cleanup for qemuDomainAttachHostSCSIDevice
John Ferlan [Thu, 14 Jul 2016 21:15:10 +0000]
qemu: Alter error path cleanup for qemuDomainAttachHostSCSIDevice

Based on recent review comment - rather than have a spate of goto failxxxx,
change to a boolean based model. Ensures that the original error can be
preserved and cleanup is a bit more orderly if more objects are added.

8 days agofs: Fix '<' comparison of value produced by logical not '!'
Erik Skultety [Tue, 19 Jul 2016 07:27:32 +0000]
fs: Fix '<' comparison of value produced by logical not '!'

Commit da665fbd introduced the following condition to virLXCProcessEnsureRootFS
and openvzReadFSConf:

if (!(<some_var> = virDomainFSDefNew()) < 0)

which broke the build on fedora with GCC 5.3.1: "logical not is only applied to
the left hand side of comparison".

Signed-off-by: Erik Skultety <>

8 days agosecurity: compilation error due to wrong parameter for vah_add_path().
Julio Faracco [Tue, 19 Jul 2016 01:09:20 +0000]
security: compilation error due to wrong parameter for vah_add_path().

The commit da665fbd introduced virStorageSourcePtr inside the structure
_virDomainFSDef. This is causing an error when libvirt is being compiled.

make[3]: Entering directory `/media/julio/8d65c59c-6ade-4740-9cdc-38016a4cb8ae
CC security/virt_aa_helper-virt-aa-helper.o
security/virt-aa-helper.c: In function 'get_files':
security/virt-aa-helper.c:1087:13: error: passing argument 2 of 'vah_add_path'
from incompatible pointer type [-Werror]
             if (vah_add_path(&buf, fs->src, "rw", true) != 0)
security/virt-aa-helper.c:732:1: note: expected 'const char *' but argument is
of type 'virStorageSourcePtr'
 vah_add_path(virBufferPtr buf, const char *path, const char *perms, bool
cc1: all warnings being treated as errors

Adding the attribute "path" from virStorageSourcePtr fixes this issue.

Signed-off-by: Julio Faracco <>