libvirt.git
7 hours agoUpdate my email address in AUTHORS.in master
Claudio Bley [Fri, 19 Dec 2014 21:29:54 +0000]
Update my email address in AUTHORS.in

7 hours agodocs: split typedef and struct definition for apibuild.py
Claudio Bley [Thu, 18 Dec 2014 20:50:20 +0000]
docs: split typedef and struct definition for apibuild.py

The members of struct virSecurityLabel and struct virSecurityModel
were not shown in the libvirt API docs because the corresponding
<field> elements were missing from the libvirt-api.xml.

The reason is that apibuild.py does not cope well with typedef's
using inline struct definitions. It fails to associate the comment
with the typedef and because of this refuses to write out the
field of the struct.

17 hours agodisable vCPU pinning with TCG mode
Daniel P. Berrange [Thu, 18 Dec 2014 16:34:48 +0000]
disable vCPU pinning with TCG mode

Although QMP returns info about vCPU threads in TCG mode, the
data it returns is mostly lies. Only the first vCPU has a valid
thread_id returned. The thread_id given for the other vCPUs is
in fact the main emulator thread. All vCPUs actually run under
the same thread in TCG mode.

Our vCPU pinning code is not at all able to cope with this
so if you try to set CPU affinity per-vCPU you end up with
wierd errors

error: Failed to start domain instance-00000007
error: cannot set CPU affinity on process 24365: Invalid argument

Since few people will care about the performance of TCG with
strict CPU pinning, lets just disable that for now, so we get
a clear error message

error: Failed to start domain instance-00000007
error: Requested operation is not valid: cpu affinity is not supported

17 hours agoDon't setup fake CPU pids for old QEMU
Daniel P. Berrange [Thu, 18 Dec 2014 16:34:39 +0000]
Don't setup fake CPU pids for old QEMU

The code assumes that def->vcpus == nvcpupids, so when we setup
fake CPU pids for old QEMU with nvcpupids == 1, we cause the
later code to read off the end of the array. This has fun results
like sche_setaffinity(0, ...) which changes libvirtd's own CPU
affinity, or even better sched_setaffinity($RANDOM, ...) which
changes the affinity of a random OS process.

22 hours agoqemu: Create memory-backend-{ram,file} iff needed
Michal Privoznik [Thu, 18 Dec 2014 11:36:48 +0000]
qemu: Create memory-backend-{ram,file} iff needed

Libvirt BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1175397
QEMU BZ:    https://bugzilla.redhat.com/show_bug.cgi?id=1170093

In qemu there are two interesting arguments:

1) -numa to create a guest NUMA node
2) -object memory-backend-{ram,file} to tell qemu which memory
region on which host's NUMA node it should allocate the guest
memory from.

Combining these two together we can instruct qemu to create a
guest NUMA node that is tied to a host NUMA node. And it works
just fine. However, depending on machine type used, there might
be some issued during migration when OVMF is enabled (see QEMU
BZ). While this truly is a QEMU bug, we can help avoiding it. The
problem lies within the memory backend objects somewhere. Having
said that, fix on our side consists on putting those objects on
the command line if and only if needed. For instance, while
previously we would construct this (in all ways correct) command
line:

    -object memory-backend-ram,size=256M,id=ram-node0 \
    -numa node,nodeid=0,cpus=0,memdev=ram-node0

now we create just:

    -numa node,nodeid=0,cpus=0,mem=256

because the backend object is obviously not tied to any specific
host NUMA node.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>

41 hours agoRemove redundant cleanup in qemuDomainAttachVirtioDiskDevice
Ján Tomko [Thu, 18 Dec 2014 11:45:04 +0000]
Remove redundant cleanup in qemuDomainAttachVirtioDiskDevice

Commit ca91ba7 moved these into the qemuDomainPrepareDisk helper,
but forgot to remove them from here as well.

41 hours agoFix hotplugging of block device-backed usb disks
Ján Tomko [Thu, 18 Dec 2014 11:50:18 +0000]
Fix hotplugging of block device-backed usb disks

Commit ca91ba7 moved qemuSetupDiskCgroup into the qemuDomainPrepareDisk
helper, but failed to call it for usb disks.

https://bugzilla.redhat.com/show_bug.cgi?id=1175668`

2 days agoBuffer size too small when reading sysinfo
Boris Fiuczynski [Wed, 17 Dec 2014 15:47:11 +0000]
Buffer size too small when reading sysinfo

On a system with 160 CPUs the /proc/cpuinfo size grows beyond
the currently set limit of 10KB causing an internal error.

This patch increases the buffer size to 1MB.

Signed-off-by: Boris Fiuczynski <fiuczy@linux.vnet.ibm.com>

2 days agoqemu: fix memory leak in blockinfo
Eric Blake [Wed, 17 Dec 2014 23:10:45 +0000]
qemu: fix memory leak in blockinfo

Coverity flagged commit 0282ca45 as introducing a memory leak;
in all my refactoring to make capacity probing conditional on
whether the image is non-raw, I missed deleting the unconditional
probe.

* src/qemu/qemu_driver.c (qemuStorageLimitsRefresh): Drop
redundant assignment.

Signed-off-by: Eric Blake <eblake@redhat.com>

2 days agoFix error message on redirdev caps detection
Ján Tomko [Tue, 16 Dec 2014 15:29:00 +0000]
Fix error message on redirdev caps detection

2 days agological: Add "--type snapshot" to lvcreate command
John Ferlan [Tue, 16 Dec 2014 14:15:03 +0000]
logical: Add "--type snapshot" to lvcreate command

A recent lvm change has resulted in a change for the "default" type of
logical volume created when the "--virtualsize" or "--V" is supplied on
the command line (e.g. when the allocation and capacity values of a to
be created volume differ). It seems that at the very least the following
change adjusts the default type:

https://git.fedorahosted.org/cgit/lvm2.git/commit/?id=e0164f21

and the following may also have some impact.

https://git.fedorahosted.org/cgit/lvm2.git/commit/?id=87fc3b71

When using the virsh vol-create-as or vol-create xmlfile commands, the
result is that libvirt will now create a "thin logical volume" and a
"thin logical volume pool" rather than just a "thin snapshot logical
volume". For example the following sequence:

  # lvcreate --name test -L 2M -V 5M lvm_test
    Rounding up size to full physical extent 4.00 MiB
    Rounding up size to full physical extent 8.00 MiB
    Logical volume "test" created.
  # lvs lvm_test
    LV    VG       Attr       LSize Pool  Origin Data%  Meta%  Move Log Cpy%Sync Convert
    lvol1 lvm_test twi-a-tz-- 4.00m              0.00   0.98
    test  lvm_test Vwi-a-tz-- 8.00m lvol1        0.00

compared to the former code which had the following:

    LV   VG       Attr       LSize  Pool Origin         Data%  Move Log Cpy%Sync Convert
    test LVM_Test swi-a-s---  4.00m      [test_vorigin]   0.00

Since libvirt doesn't know how to parse the thin logical volume
and pool, it will fail to find the newly created volume and pool
even though it exists in the volume group.

It cannot find since the command used to find/parse returns a thin volume
'test' with no associated device, for example the output is:

  lvol1##UgUwkp-fTFP-C0rc-ufue-xrYh-dkPr-FGPFPx#lvol1_tdata(0)#thin-pool#1#4194304#4194304#4194304#twi-a-tz--
  test##NcaIoH-4YWJ-QKu3-sJc3-EOcS-goff-cThLIL##thin#0#8388608#4194304#8388608#Vwi-a-tz--

as compared to the former which had the following:

      test#[test_vorigin]#Dt5Of3-4WE6-buvw-CWJ4-XOiz-ywOU-YULYw6#/dev/sda3(1300)#linear#1#4194304#4194304#4194304#swi-a-s---

While it's possible to generate code to handle the new thin lv and pool, this
patch will add a "--type snapshot" onto the lvcreate command libvirt uses
in order to "for now" be able to continue to utilize the thin snapshots

2 days agoconf: fix cannot start a guest have a shareable network iscsi hostdev
Luyao Huang [Tue, 16 Dec 2014 03:16:58 +0000]
conf: fix cannot start a guest have a shareable network iscsi hostdev

https://bugzilla.redhat.com/show_bug.cgi?id=1174569

There's nothing we need to do for shared iSCSI devices in
qemuAddSharedHostdev and qemuRemoveSharedHostdev. The iSCSI layer
takes care about that for us.

Signed-off-by: Luyao Huang <lhuang@redhat.com>
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>

2 days agogetstats: crawl backing chain for qemu
Eric Blake [Sat, 6 Dec 2014 07:14:43 +0000]
getstats: crawl backing chain for qemu

Wire up backing chain recursion.  For the first time, it is now
possible to get libvirt to expose that qemu tracks read statistics
on backing files, as well as report maximum extent written on a
backing file during a block-commit operation.

For a running domain, where one of the two images has a backing
file, I see the traditional output:

$ virsh domstats --block testvm2
Domain: 'testvm2'
  block.count=2
  block.0.name=vda
  block.0.path=/tmp/wrapper.qcow2
  block.0.rd.reqs=1
  block.0.rd.bytes=512
  block.0.rd.times=28858
  block.0.wr.reqs=0
  block.0.wr.bytes=0
  block.0.wr.times=0
  block.0.fl.reqs=0
  block.0.fl.times=0
  block.0.allocation=0
  block.0.capacity=1310720000
  block.0.physical=200704
  block.1.name=vdb
  block.1.path=/dev/sda7
  block.1.rd.reqs=0
  block.1.rd.bytes=0
  block.1.rd.times=0
  block.1.wr.reqs=0
  block.1.wr.bytes=0
  block.1.wr.times=0
  block.1.fl.reqs=0
  block.1.fl.times=0
  block.1.allocation=0
  block.1.capacity=1310720000

vs. the new output:

$ virsh domstats --block --backing testvm2
Domain: 'testvm2'
  block.count=3
  block.0.name=vda
  block.0.path=/tmp/wrapper.qcow2
  block.0.rd.reqs=1
  block.0.rd.bytes=512
  block.0.rd.times=28858
  block.0.wr.reqs=0
  block.0.wr.bytes=0
  block.0.wr.times=0
  block.0.fl.reqs=0
  block.0.fl.times=0
  block.0.allocation=0
  block.0.capacity=1310720000
  block.0.physical=200704
  block.1.name=vda
  block.1.path=/dev/sda6
  block.1.backingIndex=1
  block.1.rd.reqs=0
  block.1.rd.bytes=0
  block.1.rd.times=0
  block.1.wr.reqs=0
  block.1.wr.bytes=0
  block.1.wr.times=0
  block.1.fl.reqs=0
  block.1.fl.times=0
  block.1.allocation=327680
  block.1.capacity=786432000
  block.2.name=vdb
  block.2.path=/dev/sda7
  block.2.rd.reqs=0
  block.2.rd.bytes=0
  block.2.rd.times=0
  block.2.wr.reqs=0
  block.2.wr.bytes=0
  block.2.wr.times=0
  block.2.fl.reqs=0
  block.2.fl.times=0
  block.2.allocation=0
  block.2.capacity=1310720000

I may later do a patch that trims the output to avoid 0 stats,
particularly for backing files (which are more likely to have
0 stats, at least for write statistics when no block-commit
is performed).  Also, I still plan to expose physical size
information (qemu doesn't expose it yet, so it requires a stat,
and for block devices, a further open/seek operation).  But
this patch is good enough without worrying about that yet.

* src/qemu/qemu_driver.c (QEMU_DOMAIN_STATS_BACKING): New internal
enum bit.
(qemuConnectGetAllDomainStats): Recognize new user flag, and pass
details to...
(qemuDomainGetStatsBlock): ...here, where we can do longer recursion.
(qemuDomainGetStatsOneBlock): Output new field.

Signed-off-by: Eric Blake <eblake@redhat.com>

2 days agogetstats: split block stats reporting for easier recursion
Eric Blake [Sat, 6 Dec 2014 07:04:12 +0000]
getstats: split block stats reporting for easier recursion

In order to report stats on backing chains, we need to separate
the output of stats for one block from how we traverse blocks.

* src/qemu/qemu_driver.c (qemuDomainGetStatsBlock): Split...
(qemuDomainGetStatsOneBlock): ...into new helper.

Signed-off-by: Eric Blake <eblake@redhat.com>

2 days agogetstats: add new flag for block backing chain
Eric Blake [Tue, 25 Nov 2014 15:46:49 +0000]
getstats: add new flag for block backing chain

This patch introduces access to allocation information about
a backing chain of a live domain.  While querying storage
volumes for read-only disks could provide some of the details,
we do NOT want to read() a file while qemu is writing it.
Also, there is one case where we have to rely on qemu: when
doing a block commit into a backing file, where that file is
stored in qcow2 format on a host block device, we want to know
the current highest write offset into that image, in order to
know if the disk must be resized larger.  qemu-img does not
(currently) show this information, and none of the earlier
block APIs were extensible enough to expose it.  But
virDomainListGetStats is perfect for the job!

We don't need a new group of statistics, as the existing block
group is sufficient.  On the other hand, as existing libvirt
releases already report 1:1 mapping of block.count to <disk>
devices, changing the array size could confuse older clients;
and even with newer clients, the time and memory taken to
report additional statistics is not always necessary (backing
files are generally read-only except for block-commit, so while
read statistics may change, sizing statistics will not).  So
the choice here is to add a new flag that only newer callers
will pass, when they are prepared for the additional information.

This patch introduces the new API, but it will take more
patches to get it implemented for qemu.

* include/libvirt/libvirt-domain.h
(VIR_CONNECT_GET_ALL_DOMAINS_STATS_BACKING): New flag.
* src/libvirt-domain.c (virConnectGetAllDomainStats): Document it,
and add a new field when it is in use.
* tools/virsh-domain-monitor.c (cmdDomstats): Use new flag.
* tools/virsh.pod (domstats): Document it.

Signed-off-by: Eric Blake <eblake@redhat.com>

2 days agogetstats: prepare for dynamic block.count stat
Eric Blake [Fri, 5 Dec 2014 23:19:00 +0000]
getstats: prepare for dynamic block.count stat

A coming patch will make it optionally possible to list backing
chain block stats; in this mode of operation, block.counts is no
longer the number of <disks> in the domain, but the number of
blocks in the array being reported.  We still want block.count
listed first, but rather than iterate the tree twice (once to
count, and once to list stats), it's easier to just touch things
up after the fact.

* src/qemu/qemu_driver.c (qemuDomainGetStatsBlock): Compute count
after the fact.

Signed-off-by: Eric Blake <eblake@redhat.com>

2 days agogetstats: report block sizes for offline domains
Eric Blake [Sat, 6 Dec 2014 06:01:05 +0000]
getstats: report block sizes for offline domains

The prior refactoring can now be put to use. With the same domain
as the earlier commit 7b49926 (one qcow2 disk and an empty
cdrom drive):
$ virsh domstats --block foo
Domain: 'foo'
  block.count=2
  block.0.name=hda
  block.0.path=/var/lib/libvirt/images/foo.qcow2
  block.0.allocation=1309614080
  block.0.capacity=42949672960
  block.0.physical=1309671424
  block.1.name=hdc

* src/qemu/qemu_driver.c (qemuDomainGetStatsBlock): Use
qemuStorageLimitsRefresh to report offline statistics.

Signed-off-by: Eric Blake <eblake@redhat.com>

2 days agoqemu: refactor blockinfo data gathering
Eric Blake [Wed, 17 Dec 2014 06:23:24 +0000]
qemu: refactor blockinfo data gathering

Create a helper function that can be reused for gathering block
info from virDomainListGetStats.

* src/qemu/qemu_driver.c (qemuDomainGetBlockInfo): Split guts...
(qemuStorageLimitsRefresh): ...into new helper function.

Signed-off-by: Eric Blake <eblake@redhat.com>

2 days agoqemu: fix bugs in blockstats
Eric Blake [Wed, 17 Dec 2014 06:18:51 +0000]
qemu: fix bugs in blockstats

The documentation for virDomainBlockInfo was confusing: it stated
that 'physical' was the size of the container, then gave an example
of it being the amount of storage used by a sparse file (that is,
for a sparse raw image on a regular file, the wording implied
capacity==physical, while allocation was smaller; but the example
instead claimed physical==allocation).  Since we use 'physical' for
the last offset of a block device, we should do likewise for
regular files.

Furthermore, the example claimed that for a qcow2 regular file,
allocation==physical.  At the time the code was first written,
this was true (qcow2 files were allocated sequentially, and were
never sparse, so the last sector written happened to also match
the disk space occupied); but modern qemu does much better and
can punch holes for a qcow2 with allocation < physical.

Basically, after this patch, the three fields are now reliably
mapped as:
 'capacity' - how much storage the guest can see (equal to
physical for raw images, determined by image metadata otherwise)
 'allocation' - how much storage the image occupies (similar to
what 'du' would report)
 'physical' - the last offset of the image (similar to what 'ls'
would report)

'capacity' can be larger than 'physical' (such as for a qcow2
image that does not vary much from a backing file) or smaller
(such as for a qcow2 file with lots of internal snapshots).
Likewise, 'allocation' can be (slightly) larger than 'physical'
(such as counting the tail of cluster allocations required to
round a file size up to filesystem granularity) or smaller
(for a sparse file).  A block-resize operation changes capacity
(which, for raw images, also changes physical); many non-raw
images automatically grow physical and allocation as necessary
when starting with an allocation smaller than capacity; and even
when capacity and physical stay unchanged, allocation can change
when converting sectors from holes to data or back.

Note that this does not change semantics for qcow2 images stored
on block devices; there, we still rely on qemu to report the
highest written extent for allocation.  So using this API to
track when to extend a block device because a qcow2 image is
about to exceed a threshold will not see any changes.

Also, note that virStorageVolInfo is unfortunately limited to
just 'capacity' and 'allocation' (we can't expand it to add
'physical', although we can expand the XML to add it there);
historically, that struct's 'allocation' value has reported
file size for qcow2 files (what this patch terms 'physical'
for a domain block device), but disk usage for raw files (what
this patch terms 'allocation').  So follow-up patches will be
needed to make storage volumes report the same allocation
values and get at physical values, where those differ.

* include/libvirt/libvirt-domain.h (_virDomainBlockInfo): Tweak
documentation to match saner definition.
* src/qemu/qemu_driver.c (qemuDomainGetBlockInfo): For regular
files, physical size is capacity, not allocation.

Signed-off-by: Eric Blake <eblake@redhat.com>

2 days agogetstats: rearrange blockinfo gathering
Eric Blake [Wed, 17 Dec 2014 06:13:04 +0000]
getstats: rearrange blockinfo gathering

Ultimately, we want to avoid read()ing a file while qemu is running.
We still have to open() block devices to determine their physical
size, but that is safer.  This patch rearranges code to group
together all code that reads the image, to make it easier for later
patches to skip the metadata collection when possible.

* src/qemu/qemu_driver.c (qemuDomainGetBlockInfo): Check for empty
disk up front.  Place metadata reading next to use.

Signed-off-by: Eric Blake <eblake@redhat.com>

3 days agogetstats: perform recursion in monitor collection
Eric Blake [Fri, 12 Dec 2014 16:53:33 +0000]
getstats: perform recursion in monitor collection

When requested in a later patch, the QMP command results are now
examined recursively.  As qemu_driver will eventually have to
read items out of the hash table as stored by this patch, the
computation of backing alias string is done in a shared location.

* src/qemu/qemu_domain.h (qemuDomainStorageAlias): New prototype.
* src/qemu/qemu_domain.c (qemuDomainStorageAlias): Implement it.
* src/qemu/qemu_monitor_json.c
(qemuMonitorJSONGetOneBlockStatsInfo)
(qemuMonitorJSONBlockStatsUpdateCapacityOne): Perform recursion.
(qemuMonitorJSONGetAllBlockStatsInfo)
(qemuMonitorJSONBlockStatsUpdateCapacity): Update callers.

Signed-off-by: Eric Blake <eblake@redhat.com>

3 days agogetstats: prepare monitor collection for recursion
Eric Blake [Thu, 11 Dec 2014 22:28:41 +0000]
getstats: prepare monitor collection for recursion

A future patch will allow recursion into backing chains when
collecting block stats.  This patch should not change behavior,
but merely moves out the common code that will be reused once
recursion is enabled, and adds the parameter that will turn on
recursion.

* src/qemu/qemu_monitor.h (qemuMonitorGetAllBlockStatsInfo)
(qemuMonitorBlockStatsUpdateCapacity): Add recursion parameter,
although it is ignored for now.
* src/qemu/qemu_monitor.h (qemuMonitorGetAllBlockStatsInfo)
(qemuMonitorBlockStatsUpdateCapacity): Likewise.
* src/qemu/qemu_monitor_json.h
(qemuMonitorJSONGetAllBlockStatsInfo)
(qemuMonitorJSONBlockStatsUpdateCapacity): Likewise.
* src/qemu/qemu_monitor_json.c
(qemuMonitorJSONGetAllBlockStatsInfo)
(qemuMonitorJSONBlockStatsUpdateCapacity): Add parameter, and
split...
(qemuMonitorJSONGetOneBlockStatsInfo)
(qemuMonitorJSONBlockStatsUpdateCapacityOne): ...into helpers.
(qemuMonitorJSONGetBlockStatsInfo): Update caller.
* src/qemu/qemu_driver.c (qemuDomainGetStatsBlock): Update caller.
* src/qemu/qemu_migration.c (qemuMigrationCookieAddNBD): Likewise.

Signed-off-by: Eric Blake <eblake@redhat.com>

3 days agoqemu: let blockinfo reuse virStorageSource
Eric Blake [Sun, 16 Nov 2014 04:54:33 +0000]
qemu: let blockinfo reuse virStorageSource

Right now, grabbing blockinfo always calls stat on the disk, then
opens the image to determine the capacity, using a throw-away
virStorageSourcePtr.  This has a couple of drawbacks:

1. We are calling stat and opening a file on every invocation of
the API.  However, there are cases where the stats should NOT be
changing between successive calls (if a domain is running, no
one should be changing the physical size of a block device or raw
image behind our backs; capacity of read-only files should not
be changing; and we are the gateway to the block-resize command
to know when the capacity of read-write files should be changing).
True, we still have to use stat in some cases (a sparse raw file
changes allocation if it is read-write and the amount of holes is
changing, and a read-write qcow2 image stored in a file changes
physical size if it was not fully pre-allocated).  But for
read-only images, even this should be something we can remember
from the previous time, rather than repeating every call.

2. We want to enhance the power of virDomainListGetStats, by
sharing code.  But we already have a virStorageSourcePtr for
each disk, and it would be easier to reuse the common structure
than to have to worry about the one-off virDomainBlockInfoPtr.

While this patch does not optimize reuse of information in point
1, it does get us closer to being able to do so; by updating a
structure that survives between consecutive calls.

* src/util/virstoragefile.h (_virStorageSource): Add physical, to
mirror virDomainBlockInfo; rearrange fields to match public struct.
(virStorageSourceCopy): Copy the new field.
* src/qemu/qemu_driver.c (qemuDomainGetBlockInfo): Store into
storage source, then copy to block info.

Signed-off-by: Eric Blake <eblake@redhat.com>

3 days agoqemu: refactor blockinfo job handling
Eric Blake [Fri, 14 Nov 2014 16:44:40 +0000]
qemu: refactor blockinfo job handling

In order for a future patch to virDomainListGetStats to reuse
some code for determining disk usage of offline domains, we
need to make it easier to pull out part of the guts of grabbing
blockinfo.  The current implementation grabs a job fairly late
in the game, while getstats will already own a job; reordering
things so that the job is always grabbed up front in both
functions will make it easier to pull out the common code.
This patch results in grabbing a job in cases where one was not
previously needed, but as it is a query job, it should not be
noticeably slower.

This patch touches the same code as the fix for CVE-2014-6458
(commit b799259); in that patch, we avoided hotplug changing
a disk reference during the time of obtaining a monitor lock
by copying all data we needed and no longer referencing disk;
this patch goes the other way and ensures that by holding the
job, the disk cannot be changed so we no longer need to worry
about the disk being invalidated across the monitor lock.

* src/qemu/qemu_driver.c (qemuDomainGetBlockInfo): Rearrange job
control to be outside of disk information.

Signed-off-by: Eric Blake <eblake@redhat.com>

3 days agobuild: fix typo in previous patch
Eric Blake [Tue, 16 Dec 2014 19:55:57 +0000]
build: fix typo in previous patch

* src/util/virfile.c (safezero_mmap): Fix missing semicolon.

Signed-off-by: Eric Blake <eblake@redhat.com>

3 days agoutil: Fix fallocate stubs for mingw build
Martin Kletzander [Tue, 16 Dec 2014 19:10:20 +0000]
util: Fix fallocate stubs for mingw build

When any of the functions modified in commit 214c687b took false branch,
the function itself used none of its parameters resulting in "unused
parameter" error.  Rewriting these functions to the stubs we use
elsewhere should fix the problem.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>

3 days agoqemu: Free saved error in qemuDomainSetVcpusFlags
Martin Kletzander [Tue, 16 Dec 2014 19:02:36 +0000]
qemu: Free saved error in qemuDomainSetVcpusFlags

Commit e3435caf added cleanup code to qemuDomainSetVcpusFlags() that was
not supposed to reset the error.  Usual procedure was done, saving the
error to temporary variable, but it was never free'd, but rather leaked.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>

3 days agoqemu: Add missing goto error in qemuRestoreCgroupState
Martin Kletzander [Tue, 16 Dec 2014 18:59:33 +0000]
qemu: Add missing goto error in qemuRestoreCgroupState

Commit af2a1f05 tried clearly separating each condition in
qemuRestoreCgroupState() for the sake of readability, however somehow
one condition body was missing.  That means that the body of the next
condition got executed only if both of there were true, which is
impossible, thus resulting in a dead code and a logic error.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>

3 days agoconf: Fix invalid condition when parsing storage owner
Martin Kletzander [Tue, 16 Dec 2014 16:38:59 +0000]
conf: Fix invalid condition when parsing storage owner

In commit d2632d60 we agreed taht we want the parsed uid to properly
overflow but only to -1, however the value was read into long and then
wrapped into uid_t.  That meaned it failed on 32-bit systems.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>

3 days agovirstoragefile: Have virStorageFileResize use safezero
John Ferlan [Mon, 8 Dec 2014 13:06:57 +0000]
virstoragefile: Have virStorageFileResize use safezero

Currently virStorageFileResize() function uses build conditionals to
choose either the posix_fallocate() or syscall(SYS_fallocate) with no
fallback in order to preallocate the space in the newly resized file.

Since the safezero code has a similar set of conditionals modify the
resize and safezero code in order to allow the resize logic to make use
of safezero to unify the look/feel of the code paths.

Add a new boolean (resize) to safezero() to make the optional decision
whether to try syscall(SYS_fallocate) if the posix_fallocate fails because
HAVE_POSIX_FALLOCATE is not defined (eg, return -1 and errno == 0).

Create a local safezero_sys_fallocate in order to handle the resize
code paths that support that.  If not present, the set errno = ENOSYS
in order to allow the caller to handle the failure scenarios.

Signed-off-by: John Ferlan <jferlan@redhat.com>

3 days agovirfile: Refactor safezero
John Ferlan [Fri, 5 Dec 2014 21:18:29 +0000]
virfile: Refactor safezero

Currently build conditionals decide which of two safezero() functions
should be built - either the posix_fallocate() or mmap() with a fallback
to a slower safewrite() algorithm in order to preallocate space in a raw file.

This patch will refactor safezero to utilize static functions for either
posix_fallocate or mmap/safewrite. The build conditional still exist, but
are only for shorter sections of code.

The posix_fallocate path will make use of the ret/errno setting to contain
the logic for safezero to decide whether it needs to fallback to other
algorithms. A return of -1 with errno not changed will indicate the conditional
is not present; otherwise, a return of -1 with errno change indicates the
call was made and it failed (no functional difference to current algorithm).

The mmap/safewrite option changes only slightly to handle the ftruncate
failure for mmap. That is, previously if the ftruncate failed, there was
no fallback to the slow safewrite option.

Signed-off-by: John Ferlan <jferlan@redhat.com>

3 days agoconf: Rework virDomainObjListFindByUUID to allow more concurrent APIs
Martin Kletzander [Tue, 2 Dec 2014 07:33:33 +0000]
conf: Rework virDomainObjListFindByUUID to allow more concurrent APIs

Currently, when there is an API that's blocking with locked domain and
second API that's waiting in virDomainObjListFindByUUID() for the domain
lock (with the domain list locked) no other API can be executed on any
domain on the whole hypervisor because all would wait for the domain
list to be locked.  This patch adds new optional approach to this in
which the domain is only ref'd (reference counter is incremented)
instead of being locked and is locked *after* the list itself is
unlocked.  We might consider only ref'ing the domain in the future and
leaving locking on particular APIs, but that's no tonight's fairy tale.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>

3 days agostorage: unify permission formatting
Martin Kletzander [Wed, 10 Dec 2014 12:54:10 +0000]
storage: unify permission formatting

Volume and pool formatting functions took different approaches to
unspecified uids/gids.  When unknown, it is always parsed as -1, but one
of the functions formatted it as unsigned int (wrong) and one as
int (better).  Due to that, our two of our XML files from tests cannot
be parsed on 32-bit machines.

RNG schema needs to be modified as well, but because both
storagepool.rng and storagevol.rng need same schema for permission
element, save some space by moving it to storagecommon.rng.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>

3 days agoqemu: Fix hotplugging cpus with strict memory pinning
Martin Kletzander [Fri, 12 Dec 2014 14:36:45 +0000]
qemu: Fix hotplugging cpus with strict memory pinning

When hot-plugging a VCPU into the guest, kvm needs to allocate some data
from the DMA zone, which might be in a memory node that's not allowed in
cpuset.mems.  Basically the same problem as there was with starting the
domain and due to which commit 7e72ac787848b7434c9359a57c1e2789d92350f8
exists.  This patch just extends it to hotplugging as well.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1161540

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>

3 days agoqemu: Leave cpuset.mems in parent cgroup alone
Martin Kletzander [Fri, 12 Dec 2014 14:29:48 +0000]
qemu: Leave cpuset.mems in parent cgroup alone

Instead of setting the value of cpuset.mems once when the domain starts
and then re-calculating the value every time we need to change the child
cgroup values, leave the cgroup alone and rather set the child data
every time there is new cgroup created.  We don't leave any task in the
parent group anyway.  This will ease both current and future code.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>

3 days agoqemu: Save numad advice into qemuDomainObjPrivate
Martin Kletzander [Fri, 12 Dec 2014 14:23:12 +0000]
qemu: Save numad advice into qemuDomainObjPrivate

Thanks to that we don't need to drag the pointer everywhere and future
code will get cleaner.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>

3 days agoqemu: Remove unnecessary qemuSetupCgroupPostInit function
Martin Kletzander [Fri, 12 Dec 2014 14:03:12 +0000]
qemu: Remove unnecessary qemuSetupCgroupPostInit function

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>

3 days agoutil: Add virNumaGetHostNodeset
Martin Kletzander [Sat, 13 Dec 2014 08:57:00 +0000]
util: Add virNumaGetHostNodeset

That function tries its best to create a bitmap of host NUMA nodes.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>

3 days agoutil: Add function virCgroupHasEmptyTasks
Martin Kletzander [Sat, 13 Dec 2014 08:56:00 +0000]
util: Add function virCgroupHasEmptyTasks

That function helps checking whether there's a task in that cgroup.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>

3 days agospec: Fix syntax
Jiri Denemark [Tue, 16 Dec 2014 08:21:40 +0000]
spec: Fix syntax

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>

4 days agoavoid using deprecated udev logging functions
Daniel P. Berrange [Mon, 15 Dec 2014 15:32:13 +0000]
avoid using deprecated udev logging functions

In systemd >= 218, the udev_set_log_fn method has been marked
deprecated and turned into a no-op. Nothing in the udev client
library will print to stderr by default anymore, so we can
just stop installing a logging hook for new enough udev.

4 days agospec: Disable -Werror in Fedora RPM builds
Daniel P. Berrange [Mon, 15 Dec 2014 15:24:01 +0000]
spec: Disable -Werror in Fedora RPM builds

Since we switched to using GIT to apply patches in the RPM spec,
we automagically also turned on -Werror, since the .git directory
now exists. We don't want this on in Fedora, since changing
header files often lead to new warnings being issued. Explicitly
turn off -Werror for non-RHEL platforms, instead of relying on
the defaults

4 days agoparallels: fix usage of disk->info.addr.drive structure
Dmitry Guryanov [Mon, 15 Dec 2014 12:47:25 +0000]
parallels: fix usage of disk->info.addr.drive structure

For SCSI and SATA devices controller and unit are used
to specify drive address. For IDE devices - bus specifies
IDE bus, becase usually there are 2 IDE buses on IDE
controller.

Parallels SDK allows to set drive position by calling
PrlVmDev_SetStackIndex. Since PCS VMs have only one
controller of each type, for SATA and SCSI devices it
simple means position on bus, for IDE devices -
2 * bus_number + position_on_bus.

This patch fixes mapping from libvirt's disk->info.addr.drive
to parallels's 'StackIndex'.

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>

4 days agoparallels: set format for real disk devices
Dmitry Guryanov [Mon, 15 Dec 2014 12:47:24 +0000]
parallels: set format for real disk devices

It seems file format is usually specified event for
real block devices. So report that file format is
raw in virDomainGetXMLDesc and add checks for proper
file format to prlsdkAddDisk.

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>

4 days agoparallels: support NULL virDomainVideoAccelDefPtr
Dmitry Guryanov [Mon, 15 Dec 2014 12:47:23 +0000]
parallels: support NULL virDomainVideoAccelDefPtr

NULL value of virDomainVideoAccelDefPtr means default
values for video acceleration, so don't report error in
this case.

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>

4 days agoqemu: Auto generate a controller when attach hostdev and chr device
Luyao Huang [Mon, 15 Dec 2014 09:49:54 +0000]
qemu: Auto generate a controller when attach hostdev and chr device

https://bugzilla.redhat.com/show_bug.cgi?id=1174154

When we use attach-device add a hostdev or chr device which have a
iscsi address or others (just like guest agent, subsys iscsi disk...),
we will find there is no basic controller for our new attached device.
Somtimes this will make guest cannot start after we add them (although
they can start at the second time).

Signed-off-by: Luyao Huang <lhuang@redhat.com>

4 days agoqemu: add/remove bridge fdb entries as guest CPUs are started/stopped
Laine Stump [Wed, 10 Dec 2014 17:41:16 +0000]
qemu: add/remove bridge fdb entries as guest CPUs are started/stopped

When libvirt is managing a bridge's forwarding database (FDB)
(macTableManager='libvirt'), if we add FDB entries for a new guest
interface even before the qemu process is created, then in the case of
a migration any other guest attached to the "destination" bridge will
have its traffic immediately sent to the destination of the migration
even while the source domain is still running (and the destination, of
course, isn't). To make sure that traffic from other guests on the new
host continues flowing to the old guest until the new one is ready, we
have to wait until the new guest CPUs are started to add the FDB
entries.

Conversely, we need to remove the FDB entries from the bridge any time
the guest CPUs are stopped; among other things, this will assure
proper operation during a post-copy migration (which is just the
opposite of the problem described in the previous paragraph).

4 days agoqemu: make persistent update of graphics device supported
Wang Rui [Mon, 8 Dec 2014 13:48:33 +0000]
qemu: make persistent update of graphics device supported

We can change vnc password by using virDomainUpdateDeviceFlags API with
live flag. But it can't be changed with config flag. Error is reported as
below.

error: Operation not supported: persistent update of device 'graphics' is not supported

This patch supports the graphics arguments changed with config flag.

Signed-off-by: Wang Rui <moon.wangrui@huawei.com>

4 days agoqemu: fix alignment of qemuDomainFindGraphics
Wang Rui [Mon, 8 Dec 2014 13:48:32 +0000]
qemu: fix alignment of qemuDomainFindGraphics

Signed-off-by: Wang Rui <moon.wangrui@huawei.com>

4 days agoqemu: report properer error number when change graphics failed
Wang Rui [Mon, 8 Dec 2014 13:48:31 +0000]
qemu: report properer error number when change graphics failed

It's not supported to change some graphics arguments with '--live'.
Replace some error code VIR_ERR_INTERNAL_ERROR and VIR_ERR_INVALID_ARG
with VIR_ERR_OPERATION_UNSUPPORTED.

Signed-off-by: Wang Rui <moon.wangrui@huawei.com>

4 days agoxenconfig: fix boot device parsing
Wei Liu [Sun, 14 Dec 2014 14:58:17 +0000]
xenconfig: fix boot device parsing

The original code always checked *boot which was in effect boot[0]. It
should use boot[i].

Signed-off-by: Wei Liu <wei.liu2@citrix.com>

4 days agoconf: fix virDomainLeaseIndex logic
Luyao Huang [Mon, 15 Dec 2014 06:46:28 +0000]
conf: fix virDomainLeaseIndex logic

https://bugzilla.redhat.com/show_bug.cgi?id=1174096

When both parameter have lockspaces present, virDomainLeaseIndex
always returns -1 even there is a lease the same with the one we
check. This is due to broken logic in 'if-else' statement.

Signed-off-by: Luyao Huang <lhuang@redhat.com>
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>

4 days agoqemu: Allow system pages to <memoryBacking/>
Michal Privoznik [Fri, 12 Dec 2014 09:37:35 +0000]
qemu: Allow system pages to <memoryBacking/>

https://bugzilla.redhat.com/show_bug.cgi?id=1173507

It occurred to me that OpenStack uses the following XML when not using
regular huge pages:

  <memoryBacking>
    <hugepages>
      <page size='4' unit='KiB'/>
    </hugepages>
  </memoryBacking>

However, since we are expecting to see huge pages only, we fail to
startup the domain with following error:

  libvirtError: internal error: Unable to find any usable hugetlbfs
  mount for 4 KiB

While regular system pages are not huge pages technically, our code is
prepared for that and if it helps OpenStack (or other management
applications) we should cope with that.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>

4 days agoconf: Fix libvirtd crash matching hostdev XML
Luyao Huang [Mon, 15 Dec 2014 03:09:39 +0000]
conf: Fix libvirtd crash matching hostdev XML

https://bugzilla.redhat.com/show_bug.cgi?id=1174053

Introduced by commit id '17bddc46f' - fix a libvirtd crash when
matching a network iscsi hostdev with a host iscsi hostdev.

When we use attach-device to coldplug a network iscsi hostdev,
libvirt will check if there is already a device in XML. But if
the 'b' is a host iscsi hostdev and 'a' is a network iscsi hostdev,
then libvirtd will crash in virDomainHostdevMatchSubsysSCSIiSCSI
because 'b' doesn't have a hostname.

Add a check in virDomainHostdevMatchSubsys, if the a's protocol
and b's protocol is not the same.

Following is the backtrace:

0  0x00007f850d6bc307 in virDomainHostdevMatchSubsysSCSIiSCSI at conf/domain_conf.c:10889
1  virDomainHostdevMatchSubsys at conf/domain_conf.c:10911
2  virDomainHostdevMatch at conf/domain_conf.c:10973
3  virDomainHostdevFind at conf/domain_conf.c:10998
4  0x00007f84f6a10560 in qemuDomainAttachDeviceConfig at qemu/qemu_driver.c:7223
5  qemuDomainAttachDeviceFlags at qemu/qemu_driver.c:7554

Signed-off-by: Luyao Huang <lhuang@redhat.com>

4 days agofix typo in sanlock driver s/VIR_CONF_UONG/VIR_CONF_ULONG/
Daniel P. Berrange [Mon, 15 Dec 2014 10:08:06 +0000]
fix typo in sanlock driver s/VIR_CONF_UONG/VIR_CONF_ULONG/

fix typo introduced in previous commit

4 days agovirconf: Introduce VIR_CONF_ULONG
Michal Privoznik [Tue, 9 Dec 2014 15:22:09 +0000]
virconf: Introduce VIR_CONF_ULONG

https://bugzilla.redhat.com/show_bug.cgi?id=1160995

In our config files users are expected to pass several integer values
for different configuration knobs. However, majority of them expect a
nonnegative number and only a few of them accept a negative number too
(notably keepalive_interval in libvirtd.conf).
Therefore, a new type to config value is introduced: VIR_CONF_ULONG
that is set whenever an integer is positive or zero. With this
approach knobs accepting VIR_CONF_LONG should accept VIR_CONF_ULONG
too.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>

4 days agovirConfType: switch to VIR_ENUM_{DECL,IMPL}
Michal Privoznik [Tue, 9 Dec 2014 13:53:28 +0000]
virConfType: switch to VIR_ENUM_{DECL,IMPL}

There's no need to implement ToString() function like we do if we
can use our shiny macros.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>

4 days agovirConfSetValue: Simplify condition
Michal Privoznik [Tue, 9 Dec 2014 13:48:54 +0000]
virConfSetValue: Simplify condition

There's no need for condition of the following form:

  if (str && STREQ(str, dst))

since we have STREQ_NULLABLE macro that handles NULL cases.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>

4 days agoconf: move the check for secondary consoles of targetType serial
Erik Skultety [Thu, 11 Dec 2014 11:28:22 +0000]
conf: move the check for secondary consoles of targetType serial

For historical reasons, only the first <console> element might be of targetType
serial, but we checked for other consoles of targetType serial in our post-parse
callback if and only if we knew the first console was serial, otherwise
the check was skipped.
This patch moves the check one level up, so first
the check for secondary console of type serial is performed and then the
rest of operations continue unchanged.
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1170092

6 days agoqemu: add a qemuInterfaceStopDevices(), called when guest CPUs stop
Laine Stump [Thu, 11 Dec 2014 20:11:10 +0000]
qemu: add a qemuInterfaceStopDevices(), called when guest CPUs stop

We now have a qemuInterfaceStartDevices() which does the final
activation needed for the host-side tap/macvtap devices that are used
for qemu network connections. It will soon make sense to have the
converse qemuInterfaceStopDevices() which will undo whatever was done
during qemuInterfaceStartDevices().

A function to "stop" a single device has also been added, and is
called from the appropriate place in qemuDomainDetachNetDevice(),
although this is currently unnecessary - the device is going to
immediately be deleted anyway, so any extra "deactivation" will be for
naught. The call is included for completeness, though, in anticipation
that in the future there may be some required action that *isn't*
nullified by deleting the device.

This patch is a part of a more complete fix for:

  https://bugzilla.redhat.com/show_bug.cgi?id=1081461

6 days agoqemu: always call qemuInterfaceStartDevices() when starting CPUs
Laine Stump [Thu, 11 Dec 2014 19:49:13 +0000]
qemu: always call qemuInterfaceStartDevices() when starting CPUs

The patch that added qemuInterfaceStartDevices() (upstream commit
82977058f5b1d143a355079900029e9cbfee2fe4) had an extra conditional to
prevent calling it if the reason for starting the CPUs was
VIR_DOMAIN_RUNNING_UNPAUSED or VIR_DOMAIN_RUNNING_SAVE_CANCELED.  This
was put in by the author as the result of a reviewer asking if it was
necessary to ifup the interfaces in *all* occasions (because these
were the two cases where the CPU would have already been started (and
stopped) once, so the interface would already be ifup'ed).

It turns out that, as long as there is no corresponding
qemuInterfaceStopDevices() to ifdown the interfaces anytime the CPUs
are stopped, neglecting to ifup when reason is RUNNING_UNPAUSED or
RUNNING_SAVE_CANCELED doesn't cause any problems (because it just
happens that the interface will have already been ifup'ed by a prior
call when the CPU was previously started for some other reason).

However, it also doesn't *help*, and there will soon be a
qemuInterfaceStopDevices() function which *will* ifdown these
interfaces when the guest CPUs are stopped, and once that is done, the
interfaces will be left down in some cases when they should be up (for
example, if a domain is paused and then unpaused).

So, this patch is removing the condition in favor of always calling
qemuInterfaeStartDevices() when the guest CPUs are started.

This patch (and the aforementioned patch) resolve:

  https://bugzilla.redhat.com/show_bug.cgi?id=1081461

6 days agoqemu: avoid rare race when undefining domain
Martin Kletzander [Thu, 11 Dec 2014 10:14:08 +0000]
qemu: avoid rare race when undefining domain

When one domain is being undefined and at the same time started, for
example, there is a possibility of a rare problem occuring.

 - Thread 1 does virDomainUndefine(), has the lock, checks that the
   domain is active and because it's not, calls
   virDomainObjListRemove().

 - Thread 2 does virDomainCreate() and tries to lock the domain.

 - Thread 1 needs to lock domain list in order to remove the domain from
   it, but must unlock domain first (proper order is to lock domain list
   first and the domain itself second).

 - Thread 2 grabs the lock, starts the domain and releases the lock.

 - Thread 1 grabs the lock and removes the domain from list.

With this patch:

 - The undefining domain gets marked as "to undefine" before it is
    unlocked.

 - If domain is found in any of the search APIs, it's returned only if
   it is not marked as "to undefine".  The check is done while the
   domain is locked.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1150505

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>

6 days agoconf: Ignore device address for model=none usb controller and memballon
Luyao Huang [Fri, 12 Dec 2014 02:32:53 +0000]
conf: Ignore device address for model=none usb controller and memballon

It make no sense at all to have it there.

Signed-off-by: Luyao Huang <lhuang@redhat.com>

6 days agoPost-release version bump for new dev cycle
Martin Kletzander [Sat, 13 Dec 2014 09:01:05 +0000]
Post-release version bump for new dev cycle

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>

7 days agoRelease of libvirt-1.2.11 v1.2.11-maint v1.2.11
Daniel Veillard [Sat, 13 Dec 2014 02:43:56 +0000]
Release of libvirt-1.2.11

- docs/news.html.in libvirt.spec.in: update for release
- po/*.po*: updated localization and regenerated

7 days agoAvoid getting '-1:-1' in devices cgroup list
Cédric Bosdonnat [Wed, 10 Dec 2014 13:32:10 +0000]
Avoid getting '-1:-1' in devices cgroup list

When calling virCgroupAllowAllDevices we get these invalid entries
in the device cgroup config.
    b -1:-1 rw
    c -1:-1 rw
Check for positive values before outputting the major and minor to
avoid that.

7 days agoconf: goto error when value of max_sectors is too large
Luyao Huang [Fri, 12 Dec 2014 02:32:54 +0000]
conf: goto error when value of max_sectors is too large

Output error when we try to set a too large max_sectors.
Just like queues and cmd_per_lun here.

Signed-off-by: Luyao Huang <lhuang@redhat.com>

8 days agoIgnore CPU features without a model for host-passthrough
Ján Tomko [Fri, 5 Dec 2014 13:03:58 +0000]
Ignore CPU features without a model for host-passthrough

This fixes reverting to snapshots created by older libvirt
and allows libvirt not to lose track of a domain that
has this in its live status XML (such as a domain
restored from managedsave)

https://bugzilla.redhat.com/show_bug.cgi?id=1030793
https://bugzilla.redhat.com/show_bug.cgi?id=1151885

8 days agoDo not format CPU features without a model
Ján Tomko [Fri, 5 Dec 2014 11:32:18 +0000]
Do not format CPU features without a model

For host-passthrough CPU we don't honor the CPU
features specified in the XML, but we allow
outputting them via the UPDATE_CPU flag for dumpxml,
this gives user a rough idea of what features the CPU
might have.

After restoring a managedsave'd domain, the features
might end up in the live status XML (in /var/run) without
the model. This XML cannot be parsed by the daemon after
restart and the domain might disappear.

This fix skips formatting the features for HOST_PASSTHROUGH
when UPDATE_CPU is not specified, so the newly restored domains
and newly created snapshots won't be affected.

Note: this doesn't fix existing snapshots or already restored
running domains.

https://bugzilla.redhat.com/show_bug.cgi?id=1030793
https://bugzilla.redhat.com/show_bug.cgi?id=1151885

8 days agoFix build on mingw
Ján Tomko [Thu, 11 Dec 2014 10:13:43 +0000]
Fix build on mingw

Add missing ATTRIBUTE_UNUSED markers.

8 days agoqemu: bulk stats: Fix logic in monitor handling CVE-2014-8131-2
Francesco Romani [Thu, 11 Dec 2014 07:44:09 +0000]
qemu: bulk stats: Fix logic in monitor handling

A logic bug in qemuConnectGetAllDomainStats makes the code mark the
monitor as available when qemuDomainObjBeginJob fails, instead of when
it succeeds, as the correct flow requires.

This patch fixes the check and updates the code documentation
accordingly.

Broken by commit 57023c0a3af4af1c547189c1f6712ed5edeb0c0b.

Signed-off-by: Francesco Romani <fromani@redhat.com>

8 days agodac: Add a new func to get DAC label of a running process
Luyao Huang [Tue, 9 Dec 2014 08:33:57 +0000]
dac: Add a new func to get DAC label of a running process

When using qemuProcessAttach to attach a qemu process,
the DAC label is not filled correctly.

Introduce a new function to get the uid:gid from the system
and fill the label.

This fixes the daemon crash when 'virsh screenshot' is called:
https://bugzilla.redhat.com/show_bug.cgi?id=1161831

It also fixes qemu-attach after the prerequisite of this patch
(commit f8c1fb3) was pushed out of order.

Signed-off-by: Luyao Huang <lhuang@redhat.com>
Signed-off-by: Ján Tomko <jtomko@redhat.com>

9 days agonetwork: Bring netdevs online later v1.2.11-rc2
Matthew Rosato [Tue, 16 Sep 2014 20:50:53 +0000]
network: Bring netdevs online later

Currently, MAC registration occurs during device creation, which is
early enough that, during live migration, you end up with duplicate
MAC addresses on still-running source and target devices, even though
the target device isn't actually being used yet.
This patch proposes to defer MAC registration until right before
the guest can actually use the device -- In other words, right
before starting guest CPUs.

Signed-off-by: Matthew Rosato <mjrosato@linux.vnet.ibm.com>
Signed-off-by: Laine Stump <laine@laine.org>

9 days agovirsh.pod: Fix typo
John Ferlan [Wed, 10 Dec 2014 13:17:10 +0000]
virsh.pod: Fix typo

Commit id 'c9ffd3ea9e' updated the descriptions, but pointed at the
wrong place for the pool-define-as (it should have been pool-create-as)

9 days agolxc: give RW access to /proc/sys/net/ipv[46] to containers
Cédric Bosdonnat [Wed, 10 Dec 2014 09:22:28 +0000]
lxc: give RW access to /proc/sys/net/ipv[46] to containers

Some programs want to change some values for the network interfaces
configuration in /proc/sys/net/ipv[46] folders. Giving RW access on them
allows wicked to work on openSUSE 13.2+.

Reusing the lxcNeedNetworkNamespace function to tell
lxcContainerMountBasicFS if the netns is disabled. When no netns is
set up, then we don't mount the /proc/sys/net/ipv[46] folder RW as
these would provide full access to the host NICs config.

9 days agoviriscsi: Need to sendtargets on Initiator IQN
John Ferlan [Tue, 9 Dec 2014 23:34:32 +0000]
viriscsi: Need to sendtargets on Initiator IQN

https://bugzilla.redhat.com/show_bug.cgi?id=1172015

The refactoring done as part of commit id '59446096' caused a regression
for the multi initiator IQN commit '6aabcb5b' because the sendtargets was
not done on/for the initiator IQN prior to login (or trying to disable
autologin)

Prior to that commit, the paths were essentially

virStorageBackendISCSIStartPool
    virStorageBackendISCSILogin
        virStorageBackendISCSIConnection
            if initiatoriqn
                virStorageBackendCreateIfaceIQN
                Issue sendtargets
                Perform --login
            else
                Issue sendtargets
                Perform --login

After that commit:

virStorageBackendISCSIStartPool
    Issue sendtargets
    Call virStorageBackendISCSIConnection
        If initiatoriqn
            virStorageBackendCreateIfaceIQN
            Perform --login
        else
            Perform --login

So for non initiator IQN paths, nothing changed. For the initiator path,
the --login fails as does any attempts to change autologin via "--op update
--name node.startup --value manual".

9 days agodocs: Fix typo in path for storage pool
John Ferlan [Wed, 10 Dec 2014 11:56:35 +0000]
docs: Fix typo in path for storage pool

9 days agoconf: Ignore device address for guestfwd channel
Martin Kletzander [Wed, 10 Dec 2014 09:56:09 +0000]
conf: Ignore device address for guestfwd channel

It make no sense at all to have it there.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>

9 days agomaint: clean up the unused variable 'caps' in src/qemu/qemu_*.c
Wang Rui [Wed, 10 Dec 2014 09:45:33 +0000]
maint: clean up the unused variable 'caps' in src/qemu/qemu_*.c

Signed-off-by: Wang Rui <moon.wangrui@huawei.com>

9 days agodocs: Fix missing curly braces
Hao Liu [Wed, 10 Dec 2014 07:25:08 +0000]
docs: Fix missing curly braces

Signed-off-by: Hao Liu <hliu@redhat.com>

9 days agostorage: Check stderr when matching parted output
Hao Liu [Wed, 10 Dec 2014 07:14:26 +0000]
storage: Check stderr when matching parted output

In old version of parted like parted-2.1-25, error message is shown in
stdout when printing a disk info without disk label.

    Error: /dev/sda: unrecognised disk label

This line has been moved to stderr in newer version of parted. So we
should check both stdout and stderr when locating this message.

This should fix bug:
    https://bugzilla.redhat.com/show_bug.cgi?id=1172468

Signed-off-by: Hao Liu <hliu@redhat.com>

9 days agoCVE-2014-8131: Fix possible deadlock and segfault in qemuConnectGetAllDomainStats() CVE-2014-8131-1
Martin Kletzander [Thu, 27 Nov 2014 14:47:52 +0000]
CVE-2014-8131: Fix possible deadlock and segfault in qemuConnectGetAllDomainStats()

When user doesn't have read access on one of the domains he requested,
the for loop could exit abruptly or continue and override pointer which
pointed to locked object.

This patch fixed two issues at once.  One is that domflags might have
had QEMU_DOMAIN_STATS_HAVE_JOB even when there was no job started (this
is fixed by doing domflags |= QEMU_DOMAIN_STATS_HAVE_JOB only when the
job was acquired and cleaning domflags on every start of the loop.
Second one is that the domain is kept locked when
virConnectGetAllDomainStatsCheckACL() fails and continues the loop when
it didn't end.  Adding a simple virObjectUnlock() and clearing the
pointer ought to do.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>

10 days agoparallels: report proper error in Create/Destroy/Suspend e.t.c.
Dmitry Guryanov [Mon, 1 Dec 2014 15:39:01 +0000]
parallels: report proper error in Create/Destroy/Suspend e.t.c.

If we want to perform some operation and domain state is not suitable
for that operation, we should report error VIR_ERR_OPERATION_INVALID.

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>

10 days agoparallels: fix getJobResultHelper
Dmitry Guryanov [Mon, 1 Dec 2014 15:39:00 +0000]
parallels: fix getJobResultHelper

When PrlJob_GetRetCode sets second argument to
error value it means sdk function failed and we
must return error from getJobResultHelper.

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>

10 days agoparallels: return PRL_RESULT from waitJob and getJobResult
Dmitry Guryanov [Mon, 1 Dec 2014 15:38:59 +0000]
parallels: return PRL_RESULT from waitJob and getJobResult

Return error code, returned by parallels SDK from
waitJob and getJobResult, so that caller can handle
different errors.

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>

10 days agoparallels: implement domainUndefine and domainUndefineFlags
Dmitry Guryanov [Mon, 1 Dec 2014 15:38:58 +0000]
parallels: implement domainUndefine and domainUndefineFlags

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>

10 days agoparallels: add cdroms support
Dmitry Guryanov [Mon, 1 Dec 2014 15:38:57 +0000]
parallels: add cdroms support

Get cdrom devices list from parallels server in
prlsdkLoadDomains and add ability to define a domain
with cdroms.

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>

10 days agoparallels: Add domainCreateWithFlags() function.
Alexander Burluka [Mon, 1 Dec 2014 15:38:56 +0000]
parallels: Add domainCreateWithFlags() function.

domainCreateWithFlags function is used by OpenStack/Nova to boot
an instance.

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>

10 days agoparallels: added function virDomainIsActive()
Alexander Burluka [Mon, 1 Dec 2014 15:38:55 +0000]
parallels: added function virDomainIsActive()

That function is necessary for proper domain removal
in openstack/nova.

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>

10 days agoparallels: refactor parallelsDomainDefineXML
Dmitry Guryanov [Mon, 1 Dec 2014 15:38:54 +0000]
parallels: refactor parallelsDomainDefineXML

First, we don't need to call prlsdkApplyConfig after
creating new VM or containers, because it's done in
functions prlsdkCreateVm and prlsdkCreateCt.

No need to check, if domain exists in the list after
prlsdkAddDomain.

Also organize code, so that we can call virObjectUnlock
in one place.

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>

10 days agoparallels: create VMs and containers with sdk
Dmitry Guryanov [Mon, 1 Dec 2014 15:38:53 +0000]
parallels: create VMs and containers with sdk

This patch replaces code, which creates domains by
running prlctl command.

prlsdkCreateVm/Ct will do prlsdkApplyConfig, because
we send request to the server only once in this case.

But prlsdkApplyConfig will be called also from
parallelsDomainDefineXML function. There is no problem with
it, parallelsDomainDefineXML will be refactored later.

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>

10 days agoparallels: rewrite parallelsApplyConfig with SDK
Dmitry Guryanov [Mon, 1 Dec 2014 15:38:52 +0000]
parallels: rewrite parallelsApplyConfig with SDK

Rewrite code, which applies domain configuration given
to virDomainDefineXML function to the VM of container
registered in PCS.

This code first check if there are unsupported parameters
in domain XML and if yes - reports error. Some of such
parameters are not supported by PCS, for some - it's not
obvious, how to convert them into PCS's corresponding params,
so let's put off it, and implement only basic params in
this patch.

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>

10 days agoparallels: reimplement functions, which change domain state
Dmitry Guryanov [Mon, 1 Dec 2014 15:38:51 +0000]
parallels: reimplement functions, which change domain state

Change domain state using parallels SDK functions instead of
prlctl command.

We don't need to send events from these functions now, becase
events handler will send them. But we still need to update
virDomainObj in privconn->domains.

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>

10 days agoparallels: handle events from parallels server
Alexander Burluka [Mon, 1 Dec 2014 15:38:50 +0000]
parallels: handle events from parallels server

Subscribe to events from parallels server. It's
needed for 2 things: to update cached domains list
and to send corresponding libvirt events.

Parallels server sends a lot of different events, in
this patch we handle only some of them. In the future
we can handle for example, changes in a host network
configuration or devices states.

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>

10 days agoparallels: move parallelsDomNotFoundError to parallels_utils.h
Dmitry Guryanov [Mon, 1 Dec 2014 15:38:49 +0000]
parallels: move parallelsDomNotFoundError to parallels_utils.h

Move macro parallelsDomNotFoundError to file parallels_utils.h, because
it will be used in parallels_sdk.c.

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>

10 days agoparallels: get domain info with SDK
Alexander Burluka [Mon, 1 Dec 2014 15:38:48 +0000]
parallels: get domain info with SDK

Obtain information about domains using parallels sdk instead of prlctl.
prlsdkLoadDomains functions behaves as former parallelsLoadDomains with
NULL as second parameter (name) - it fills parallelsConn.domains list.

prlsdkLoadDomain is now able to update specified domain by given
virDomainObjPtr.

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>

10 days agoparallels: move IS_CT macro to parallels_utils.h
Dmitry Guryanov [Mon, 1 Dec 2014 15:38:47 +0000]
parallels: move IS_CT macro to parallels_utils.h

This macro will be used in paralles_sdk.c so move it to common header.

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>

10 days agodefine NTF_{SELF,MASTER} if undefined
Guido Günther [Tue, 9 Dec 2014 06:36:23 +0000]
define NTF_{SELF,MASTER} if undefined

Older kernel headers lack this definition (e.g. Debian Wheezy's 3.2)

10 days agosecurity: Manage SELinux labels on shared/readonly hostdev's
John Ferlan [Wed, 26 Nov 2014 17:35:46 +0000]
security: Manage SELinux labels on shared/readonly hostdev's

https://bugzilla.redhat.com/show_bug.cgi?id=1082521

Support for shared hostdev's was added in a number of commits, initially
starting with 'f2c1d9a80' and most recently commit id 'fd243fc4' to fix
issues with the initial implementation.  Missed in all those changes was
the need to mimic the virSELinux{Set|Restore}SecurityDiskLabel code to
handle the "shared" (or shareable) and readonly options when Setting
or Restoring the SELinux labels.

This patch will adjust the virSecuritySELinuxSetSecuritySCSILabel to not
use the virSecuritySELinuxSetSecurityHostdevLabelHelper in order to set
the label. Rather follow what the Disk code does by setting the label
differently based on whether shareable/readonly is set.  This patch will
also modify the virSecuritySELinuxRestoreSecuritySCSILabel to follow
the same logic as virSecuritySELinuxRestoreSecurityImageLabelInt and not
restore the label if shared/readonly

10 days agotests: Fix sharable typo
John Ferlan [Tue, 25 Nov 2014 15:38:37 +0000]
tests: Fix sharable typo