]> xenbits.xensource.com Git - libvirt.git/log
libvirt.git
10 years agostorage: ZFS support
Roman Bogorodskiy [Mon, 21 Jul 2014 14:38:42 +0000 (18:38 +0400)]
storage: ZFS support

Implement ZFS storage backend driver. Currently supported
only on FreeBSD because of ZFS limitations on Linux.

Features supported:

 - pool-start, pool-stop
 - pool-info
 - vol-list
 - vol-create / vol-delete

Pool definition looks like that:

 <pool type='zfs'>
  <name>myzfspool</name>
  <source>
    <name>actualpoolname</name>
  </source>
 </pool>

The 'actualpoolname' value is a name of the pool on the system,
such as shown by 'zpool list' command. Target makes no sense
here because volumes path is always /dev/zvol/$poolname/$volname.

User has to create a pool on his own, this driver doesn't
support pool creation currently.

A volume could be used with Qemu by adding an entry like this:

    <disk type='volume' device='disk'>
      <driver name='qemu' type='raw'/>
      <source pool='myzfspool' volume='vol5'/>
      <target dev='hdc' bus='ide'/>
    </disk>

10 years agoqemu: migration: Check domain live state after exitting the monitor
Peter Krempa [Tue, 12 Aug 2014 13:21:56 +0000 (15:21 +0200)]
qemu: migration: Check domain live state after exitting the monitor

In qemuMigrationToFile we enter the monitor multiple times and don't
check if the VM is still alive after returning form the monitor. Add the
checks to skip pieces of code in case the VM crashes while saving it's
state.

10 years agoqemu: managedsave: Check that VM is alive after entering async job
Peter Krempa [Tue, 12 Aug 2014 12:31:26 +0000 (14:31 +0200)]
qemu: managedsave: Check that VM is alive after entering async job

Saving a shutoff VM doesn't make sense and libvirtd crashes while
attempting to do that. Check that the domain is alive after entering
the save async job.

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

10 years agoqemu: process: Fix header format of qemuProcessSetVcpuAffinities
Peter Krempa [Tue, 12 Aug 2014 15:24:34 +0000 (17:24 +0200)]
qemu: process: Fix header format of qemuProcessSetVcpuAffinities

Fix header alignment and remove the unused conn parameter.

10 years agonumatune: Fix parsing of empty nodeset (0,^0)
Erik Skultety [Mon, 11 Aug 2014 14:06:23 +0000 (16:06 +0200)]
numatune: Fix parsing of empty nodeset (0,^0)

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

10 years agoconf: Format interface's driver more frequently
Michal Privoznik [Mon, 11 Aug 2014 12:51:49 +0000 (14:51 +0200)]
conf: Format interface's driver more frequently

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

There's this <driver/> element under <interface/> which can have
several attributes. However, the driver element is currently formated
only if the driver's name or txmode has been specified. This makes
only a little sense as we parse even partial <driver/>, for instance:

    <interface type='user'>
      <mac address='52:54:00:e5:48:58'/>
      <model type='virtio'/>
      <driver ioeventfd='on' event_idx='on' queues='5'/>
    </interface>

But such XML would never get formatted back.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agodocs: use correct hints per bus type in <disk> examples
Eric Blake [Mon, 11 Aug 2014 21:42:45 +0000 (15:42 -0600)]
docs: use correct hints per bus type in <disk> examples

Commit 4cf53158 tried to set up unique labels per disk in the
example, but ended up choosing strings that don't correspond
to the usual choice of bus types.  Tweak the strings once again.

* docs/formatdomain.html.in: Use preferred names.

Signed-off-by: Eric Blake <eblake@redhat.com>
10 years agonetwork: populate interface pool immediately when network is started
Laine Stump [Tue, 5 Aug 2014 21:15:31 +0000 (17:15 -0400)]
network: populate interface pool immediately when network is started

When a network is defined with "<pf dev='xyz'/>", libvirt will query
sysfs to learn the list of all virtual functions (VF) associated with
that Physical Function (PF) then populate the network's interface pool
accordingly. This action was previously done only when the first guest
actually requested an interface from the network. This patch changes
it to populate the pool immediately when the network is started. This
way any problems with the PF or its VFs will become apparent sooner.

Note that we can't remove the old calls to networkCreateInterfacePool
that happen whenever a guest requests an interface - doing so would be
asking for failures on hosts that had libvirt upgraded with a network
that had been started but not yet used.

This resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1047818

10 years agonetwork: make networkCreateInterfacePool more robust
Laine Stump [Tue, 5 Aug 2014 20:40:52 +0000 (16:40 -0400)]
network: make networkCreateInterfacePool more robust

networkCreateInterfacePool was a bit loose in its error cleanup, which
could result in a network definition with interfaces in the pool that
were NULL. This would in turn lead to a libvirtd crash when a guest
tried to attach an interface using the network with that pool.

In particular this would happen when creating a pool to be used for
macvtap connections. macvtap needs the netdev name of the virtual
function in order to use it, and each VF only has a netdev name if it
is currently bound to a network driver. If one of the VFs of a PF
happened to be bound to the pci-stub or vfio-pci driver (indicating
it's already in use for PCI passthrough), or no driver at all, it
would have no name. In this case networkCreateInterfacePool would
return an error, but would leave the netdef->forward.nifs set to the
total number of VFs in the PF. The interface attach that triggered
calling of networkCreateInterfacePool (it uses a "lazy fill" strategy)
would simply fail, but the very next attempt to attach an interface
using the same network pool would result in a crash.

This patch refactors networkCreateInterfacePool to bring it more in
line with current coding practices (label name, use of a switch with
no default case) as well as providing the following two changes to
behavior:

1) If a VF with no netdev name is encountered, just log a warning and
continue; only fail if exactly 0 devices are found to put in the pool.

2) If the function fails, clean up any partial interface pool and set
netdef->forward.nifs to 0.

This resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1111455

10 years agoMake 'uri' command a bit more prominent.
Guido Günther [Mon, 11 Aug 2014 20:02:13 +0000 (22:02 +0200)]
Make 'uri' command a bit more prominent.

This tries to address

    https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=688778

were libvirt autodetected vbox:///session and it wasn't listed in the
manpage.

10 years agoDon't fail qemu driver intialization if we can't determine hugepage size
Guido Günther [Sun, 10 Aug 2014 10:42:37 +0000 (12:42 +0200)]
Don't fail qemu driver intialization if we can't determine hugepage size

Otherwise we fail like

  libvirt version: 1.2.7, package: 6 (root 2014-08-08-16:09:22 bogon)
  virAuditOpen:62 : Unable to initialize audit layer: Protocol not supported
  virFileGetDefaultHugepageSize:2958 : internal error: Unable to parse /proc/meminfo
  virStateInitialize:749 : Initialization of QEMU state driver failed: internal error: Unable to parse /proc/meminfo
  daemonRunStateInit:922 : Driver state initialization failed

if the data can't be determined.

Reference: http://bugs.debian.org/757609

10 years agoInclude param.h in case of HAVE_BSD_CPU_AFFINITY
Guido Günther [Tue, 8 Apr 2014 21:14:25 +0000 (23:14 +0200)]
Include param.h in case of HAVE_BSD_CPU_AFFINITY

This fixes compilation on kFreeBSD which otherwise fails like

  CC       util/libvirt_util_la-virprocess.lo
In file included from /usr/include/sys/cpuset.h:35:0,
                 from util/virprocess.c:43:
/usr/include/sys/_cpuset.h:49:43: error: 'NBBY' undeclared here (not in
a function)
  long __bits[howmany(CPU_SETSIZE, _NCPUBITS)];
                                           ^
In file included from util/virprocess.c:43:0:
/usr/include/sys/cpuset.h:215:12: error: unknown type name 'cpusetid_t'
 int cpuset(cpusetid_t *);
            ^
/usr/include/sys/cpuset.h:216:30: error: expected ')' before 'id_t'
 int cpuset_setid(cpuwhich_t, id_t, cpusetid_t);
                              ^
/usr/include/sys/cpuset.h:217:42: error: expected ')' before 'id_t'
 int cpuset_getid(cpulevel_t, cpuwhich_t, id_t, cpusetid_t *);
                                          ^
/usr/include/sys/cpuset.h:218:48: error: expected ')' before 'id_t'
 int cpuset_getaffinity(cpulevel_t, cpuwhich_t, id_t, size_t, cpuset_t
*);
                                                ^
/usr/include/sys/cpuset.h:219:48: error: expected ')' before 'id_t'
 int cpuset_setaffinity(cpulevel_t, cpuwhich_t, id_t, size_t, const
cpuset_t *);

And it's the correct usage as documented in

  http://www.freebsd.org/cgi/man.cgi?query=cpuset_setid

Also change the #ifdef HAVE_BSH_CPU_AFFINITY to #if for consistency.

10 years agoqemu: use guest-fsfreeze-freeze-list command if mountpoints to freeze specified
Tomoki Sekiyama [Fri, 8 Aug 2014 20:03:41 +0000 (16:03 -0400)]
qemu: use guest-fsfreeze-freeze-list command if mountpoints to freeze specified

A command to freeze a part of mounted file systems is implemented in
upstream QEMU-guest-agent with a name of 'guest-fsfreeze-freeze-list'.
This fixes the name of the command used to partial fsfreeze in qemu driver
when 'mountpoints' option is specified to virDomainFSFreeze API.

Signed-off-by: Tomoki Sekiyama <tomoki.sekiyama@hds.com>
10 years agoqemu: Actually clear bandwidth settings
Jianwei Hu [Mon, 11 Aug 2014 06:41:33 +0000 (14:41 +0800)]
qemu: Actually clear bandwidth settings

The virDomainSetInterfaceParameters implementation in qemu over
VIR_DOMAIN_AFFECT_CONFIG doesn't work as expected. When trying to
clear out the bandwidth settings for an interface, it has no
actual effect:

    virsh # domiftune --config $domain $interface
    inbound.average: 100
    inbound.peak   : 0
    inbound.burst  : 0
    outbound.average: 10
    outbound.peak  : 0
    outbound.burst : 0

    virsh domiftune --config $domain $interface 0 0

    virsh # domiftune --config $domain $interface
    inbound.average: 100
    inbound.peak   : 0
    inbound.burst  : 0
    outbound.average: 10
    outbound.peak  : 0
    outbound.burst : 0

But according to virsh man page:

    To clear inbound or outbound settings, use --inbound or
    --outbound respectfully with average value of zero.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agosrc/xenxs: Refactor code parsing OS config
Kiarie Kahurani [Thu, 7 Aug 2014 18:33:01 +0000 (21:33 +0300)]
src/xenxs: Refactor code parsing OS config

introduce function
  xenParseXMOS(virConfPtr conf,...........);
which parses the OS config instead

Signed-off-by: Kiarie Kahurani <davidkiarie4@gmail.com>
10 years agosrc/xenxs: Refactor code parsing general config
Kiarie Kahurani [Thu, 7 Aug 2014 18:33:00 +0000 (21:33 +0300)]
src/xenxs: Refactor code parsing general config

introduce function
   xenParseXMGeneralMeta(virConfPtr conf, .......);
which parses general metadata instead

Signed-off-by: Kiarie Kahurani <davidkiarie4@gmail.com>
10 years agosrc/xenxs: Refactor code parsing emulated hardware config
Kiarie Kahurani [Thu, 7 Aug 2014 18:32:59 +0000 (21:32 +0300)]
src/xenxs: Refactor code parsing emulated hardware config

introduce function
   xenParseXMEmulatedHardware(virConfPtr conf,.........);
which parses emulated devices config instead

Signed-off-by: Kiarie Kahurani <davidkiarie4@gmail.com>
10 years agosrc/xenxs: Refactor code parsing Vif config
Kiarie Kahurani [Thu, 7 Aug 2014 18:32:58 +0000 (21:32 +0300)]
src/xenxs: Refactor code parsing Vif config

introduce function
  xenParseXMVif(virConfPtr conf,........);
which parses Vfb config instead

Signed-off-by: Kiarie Kahurani <davidkiarie4@gmail.com>
10 years agosrc/xenxs: Refactor code parsing Char devices config
Kiarie Kahurani [Thu, 7 Aug 2014 18:32:57 +0000 (21:32 +0300)]
src/xenxs: Refactor code parsing Char devices config

introduce function
  xenParseXMCharDev(virConfPtr conf,.........);
which parses Char devices config instead

Signed-off-by: Kiarie Kahurani <davidkiarie4@gmail.com>
10 years agosrc/xenxs: Refactor code parsing Vfb config
Kiarie Kahurani [Thu, 7 Aug 2014 18:32:56 +0000 (21:32 +0300)]
src/xenxs: Refactor code parsing Vfb config

introduce function
 xenParseXMVfb(virConfPtr conf,..........);
which parses Vfb config instead

Signed-off-by: Kiarie Kahurani <davidkiarie4@gmail.com>
10 years agosrc/xenxs: Refactor code parsing xm disk config
Kiarie Kahurani [Thu, 7 Aug 2014 18:32:55 +0000 (21:32 +0300)]
src/xenxs: Refactor code parsing xm disk config

introduce function
  xenParseXMDisk(virConfPtr conf, ........);
which parses xm disk config instead

Signed-off-by: Kiarie Kahurani <davidkiarie4@gmail.com>
10 years agosrc/xenxs: Refactor code parsing CPU features
Kiarie Kahurani [Thu, 7 Aug 2014 18:32:54 +0000 (21:32 +0300)]
src/xenxs: Refactor code parsing CPU features

introduce function
  xenParseXMCPUFeatures(virConfPtr conf,.........);
which parses CPU features instead

Signed-off-by: Kiarie Kahurani <davidkiarie4@gmail.com>
10 years agosrc/xenxs: Refactor code parsing PCI config
Kiarie Kahurani [Thu, 7 Aug 2014 18:32:53 +0000 (21:32 +0300)]
src/xenxs: Refactor code parsing PCI config

introduce function
   xenParseXMPCI(virConfPtr conf, ........);
which parses PCI config instead

Signed-off-by: Kiarie Kahurani <davidkiarie4@gmail.com>
10 years agosrc/xenxs: Refactor code parsing event actions
Kiarie Kahurani [Thu, 7 Aug 2014 18:32:52 +0000 (21:32 +0300)]
src/xenxs: Refactor code parsing event actions

introduce function
  xenParseXMEventActions(virConfPtr conf,........)
which parses events leading to certain actions

Signed-off-by: Kiarie Kahurani <davidkiarie4@gmail.com>
10 years agosrc/xenxs: Refactor code parsing virtual time config
Kiarie Kahurani [Thu, 7 Aug 2014 18:32:51 +0000 (21:32 +0300)]
src/xenxs: Refactor code parsing virtual time config

introduce function
    xenParseXMTimeOffset(virConfPtr conf,.......);
which parses time offset config instead

Signed-off-by: Kiarie Kahurani <davidkiarie4@gmail.com>
10 years agosrc/xenxs: Refactor code parsing memory config
Kiarie Kahurani [Thu, 7 Aug 2014 18:32:50 +0000 (21:32 +0300)]
src/xenxs: Refactor code parsing memory config

introduce function
  xenParseXMMem(virConfPtr conf,.........);
which parses memory config instead

Signed-off-by: Kiarie Kahurani <davidkiarie4@gmail.com>
10 years agoconf: Add USB sound card support and implement it for qemu
Peter Krempa [Thu, 24 Jul 2014 15:32:31 +0000 (17:32 +0200)]
conf: Add USB sound card support and implement it for qemu

10 years agoqemu: Remove extraneous space in function prototypes
John Ferlan [Thu, 24 Jul 2014 13:23:40 +0000 (09:23 -0400)]
qemu: Remove extraneous space in function prototypes

During review of the iSCSI hostdev series, eblake noted that the
prototypes shouldn't have the extranenous space between the "*" and
the function name:

http://www.redhat.com/archives/libvir-list/2014-July/msg01227.html

Since it was more invasive than 1 or 2 lines - I said I'd send a
patch covering this once committed.

Signed-off-by: John Ferlan <jferlan@redhat.com>
10 years agohostdev: Add iSCSI hostdev XML
John Ferlan [Wed, 9 Jul 2014 14:08:34 +0000 (10:08 -0400)]
hostdev: Add iSCSI hostdev XML

Introduce a new structure to handle an iSCSI host device based on the
existing virDomainHostdevSubsysSCSI by adding a "protocol='iscsi'" to
the <source/> element. The existing scsi_host subsystem RNG was modified
to read an optional "protocol='adapter'", although it won't be written
out nor is it documented as an option (by choice).

The new hostdev structure mimics the existing <disk/> element for an
iSCSI device (network) device. New XML is:

  <hostdev mode='subsystem' type='scsi' managed='yes'>
    <source protocol='iscsi' name='iqn.1992-01.com.example'>
      <host name='example.org' port='3260'/>
      <auth username='myname'>
        <secret type='iscsi' usage='mycluster_myname'/>
      </auth>
    </source>
    <address type='drive' controller='0' bus='0' target='2' unit='5'/>
  </hostdev>

The controller element will mimic the existing scsi_host code insomuch
as when 'lsi' and 'virtio-scsi' are used.

10 years agodomain_conf: Common routine to handle network storage host xml def
John Ferlan [Thu, 10 Jul 2014 13:11:30 +0000 (09:11 -0400)]
domain_conf: Common routine to handle network storage host xml def

In preparation for hostdev support for iSCSI and a virStorageNetHostDefPtr,
split out the network disk storage parsing of the 'host' element into a
separate routine.

10 years agoblockjob: fix use-after-free in blockcopy
Eric Blake [Wed, 6 Aug 2014 20:06:23 +0000 (14:06 -0600)]
blockjob: fix use-after-free in blockcopy

Commit febf84c2 tried to delay in-memory modification of the actual
domain disk structure until after the qemu event was received.
However, I missed that the code for block pivot had been temporarily
setting disk->src = disk->mirror prior to the qemu command, in order
to label the backing chain of a reused external blockcopy disk;
and calls into qemu while still in that state before finally undoing
things at the cleanup label.  Since the qemu event handler then does:
 virStorageSourceFree(disk->src);
 disk->src = disk->mirror;
we have the sad race that a fast enough qemu event can cause a leak of
the original disk->src, as well as a use-after-free of the disk->mirror
contents, bad enough to crash libvirtd in some of my test runs, even
though the common case of the qemu event being much later won't trip
the race.

I'll go wear the brown paper bag of shame, for introducing a crasher
in between rc1 and rc2 of the freeze for 1.2.7 :(  My only
consolation is that virDomainBlockJobAbort requires the domain:write
ACL, so it is not a CVE.

The valgrind report when the race occurs looks like:

==25612== Invalid read of size 4
==25612==    at 0x50E7C90: virStorageSourceGetActualType (virstoragefile.c:1948)
==25612==    by 0x209C0B18: qemuDomainDetermineDiskChain (qemu_domain.c:2473)
==25612==    by 0x209D7F6A: qemuProcessHandleBlockJob (qemu_process.c:1087)
==25612==    by 0x209F40C9: qemuMonitorEmitBlockJob (qemu_monitor.c:1357)
...
==25612==  Address 0xe4b5610 is 0 bytes inside a block of size 200 free'd
==25612==    at 0x4A07577: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==25612==    by 0x50839E9: virFree (viralloc.c:582)
==25612==    by 0x50E7E51: virStorageSourceFree (virstoragefile.c:2015)
==25612==    by 0x209D7EFF: qemuProcessHandleBlockJob (qemu_process.c:1073)
==25612==    by 0x209F40C9: qemuMonitorEmitBlockJob (qemu_monitor.c:1357)

* src/qemu/qemu_driver.c (qemuDomainBlockPivot): Don't corrupt
disk->src, and only label chain for blockcopy.

Signed-off-by: Eric Blake <eblake@redhat.com>
10 years agoblockjob: avoid memory leak during block pivot
Eric Blake [Wed, 6 Aug 2014 20:48:59 +0000 (14:48 -0600)]
blockjob: avoid memory leak during block pivot

Valgrind caught a memory leak:

==2018== 9 bytes in 1 blocks are definitely lost in loss record 143 of 927
==2018==    at 0x4A0645D: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==2018==    by 0x8C42369: strdup (strdup.c:42)
==2018==    by 0x50EACC9: virStrdup (virstring.c:676)
==2018==    by 0x50E79E5: virStorageSourceCopy (virstoragefile.c:1845)
==2018==    by 0x20A3FAA7: qemuDomainBlockCommit (qemu_driver.c:15620)
==2018==    by 0x51DC6B2: virDomainBlockCommit (libvirt.c:20092)

I traced it to the fact that blockcopy and blockcommit end up
reparsing a backing chain on pivot, but the chain parsing code
doesn't gracefully handle the case where the backing file is
already known.

I'm not exactly sure when this was introduced, but suspect that the
refactoring in commit 9944b71 and friends that moved towards probing
in-place rather than into a temporary structure are part of the cause.

* src/util/virstoragefile.c (virStorageFileGetMetadataInternal):
Don't leak any prior value.

Signed-off-by: Eric Blake <eblake@redhat.com>
10 years agodocs: use unique dev names in <disk> examples
Eric Blake [Thu, 7 Aug 2014 14:35:53 +0000 (08:35 -0600)]
docs: use unique dev names in <disk> examples

Jiri Moskovcak reported on IRC that the documentation on valid
<disk> was confusing because it didn't have unique dev='...'
entries.

* docs/formatdomain.html.in: Use unique names.

Signed-off-by: Eric Blake <eblake@redhat.com>
10 years agovirsh: clean up attach-interface paragraph in man page
Laine Stump [Thu, 7 Aug 2014 14:50:21 +0000 (10:50 -0400)]
virsh: clean up attach-interface paragraph in man page

This makes the paragaph about attach-interface more descriptive and
correct, adding in a few bits of information that were previously
missing, e.g. --script is only allowed for bridge interfaces of Xen
domains, target name is regenerated if it starts with vnet, mac
address will be autogenerated if not specified.

(I did this in response to an email asking why a script couldn't be
specified for a bridge interface of a qemu domain, and why an
interface of type='ethernet' couldn't be created with
attach-interface)

10 years agodaemon: Fix indentation in libvirtd.c
Wang Rui [Tue, 29 Jul 2014 08:47:13 +0000 (16:47 +0800)]
daemon: Fix indentation in libvirtd.c

Signed-off-by: Wang Rui <moon.wangrui@huawei.com>
10 years agoaudit: Fix some comments
Wang Rui [Thu, 7 Aug 2014 08:12:58 +0000 (16:12 +0800)]
audit: Fix some comments

Fix a comment in virDomainAuditNetDevice.
Fix a typo in comment of qemuPhysIfaceConnect which is
the caller of virDomainAuditNetDevice.

Signed-off-by: Wang Rui <moon.wangrui@huawei.com>
10 years agosnapshot: conf: Enforce absolute paths on disk and memory images
Peter Krempa [Wed, 6 Aug 2014 13:17:00 +0000 (15:17 +0200)]
snapshot: conf: Enforce absolute paths on disk and memory images

RNG schema as well as the qemu driver requires absolute paths for memory
and disk snapshot image files but the XML parser was not enforcing it.
Add checks to avoid problems in qemu where the configuration it creates
is invalid.

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

10 years agoqemu: Make virFileFindHugeTLBFS fault tolerant
Michal Privoznik [Wed, 6 Aug 2014 08:37:48 +0000 (10:37 +0200)]
qemu: Make virFileFindHugeTLBFS fault tolerant

Since commit be0782e1 we are parsing /proc/meminfo to find out the
default huge page size. However, if the host we are running at does
not support any huge pages (e.g. CONFIG_HUGETLB_PAGE is turned off),
we will not successfully parse the meminfo file and hence the whole
qemu driver init process fails. Moreover, the default huge page size
is needed if and only if there's at least one hugetlbfs mount point.
So the fix consists of moving the virFileGetDefaultHugepageSize
function call after the first hugetlbfs mount point is found.

With this fix, we fail to start with one or more hugetlbfs mounts and
malformed meminfo file, but that's expected (how can one mount
hugetlbfs without kernel supporting huge pages?). Workaround in that
case is to umount all the hugetlbfs mounts.

Reported-by: Jim Fehlig <jfehlig@suse.com>
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agoNode Devices: Fix nodedev-list for fc_host & vports.
Prerna Saxena [Wed, 6 Aug 2014 10:20:11 +0000 (15:50 +0530)]
Node Devices: Fix nodedev-list for fc_host & vports.

In a system with Fiber Channel Host Adapters, a query to list all Fibre Channel
HBAs OR Vports currently returns empty list:
  $ virsh nodedev-list --cap fc_host

  $

Libvirt correctly discovers properties for all HBAs. However, the reporting
fails because of incorrect flag comparison while filtering these types.

This is fixed by removing references to 'VIR_CONNECT_LIST_NODE_DEVICES_CAP_*'
for comparison and replacing those with 'VIR_NODE_DEV_CAP_*'

Introduced by original commit id '652a2ec6'

Signed-off-by: Prerna Saxena <prerna@linux.vnet.ibm.com>
10 years agoqemu: reword caps-related error
Martin Kletzander [Tue, 5 Aug 2014 09:02:34 +0000 (11:02 +0200)]
qemu: reword caps-related error

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
10 years agoblockjob: correctly report active commit for job info
Eric Blake [Tue, 5 Aug 2014 14:49:32 +0000 (08:49 -0600)]
blockjob: correctly report active commit for job info

Commit 232a31b munged job info to report 'active commit' instead of
'commit' when generating events, but forgot to also munge the polling
variant of the command.

* src/qemu/qemu_driver.c (qemuDomainBlockJobImpl): Adjust type as
needed.

Signed-off-by: Eric Blake <eblake@redhat.com>
10 years agoFix vlanid attribute name in nwfilter docs
Jianwei Hu [Tue, 5 Aug 2014 05:25:16 +0000 (13:25 +0800)]
Fix vlanid attribute name in nwfilter docs

'vlanid' is the attribute name in our XML,
'vlan-id' is the ebtables attribute:

[root@localhost ~]# virsh nwfilter-dumpxml myself
<filter name='myself' chain='root'>
  <uuid>7192ef51-cd50-4f14-ad7b-fa5c69ea19e3</uuid>
  <rule action='accept' direction='in' priority='500'>
    <vlan dstmacaddr='00:11:22:33:44:55' vlanid='44'/>
  </rule>
</filter>

[root@localhost ~]# ebtables -t nat -L
Bridge table: nat

...
-p 802_1Q -d 0:11:22:33:44:55 --vlan-id 44 -j ACCEPT

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

Signed-off-by: Ján Tomko <jtomko@redhat.com>
10 years agoDon't overwrite errors from virNetDevBandwidthSet
Ján Tomko [Mon, 28 Jul 2014 12:46:46 +0000 (14:46 +0200)]
Don't overwrite errors from virNetDevBandwidthSet

Otherwise this beautiful error would be overwritten when
the function is called with a really high rate number:

2014-07-28 12:51:47.920+0000: 2304: error : virCommandWait:2399 :
internal error: Child process (/sbin/tc class add dev vnet0 parent 1:
classid 1:1 htb rate 4294968kbps) unexpected exit status 1: Illegal "rate"
Usage: ... qdisc add ... htb [default N] [r2q N]
 default  minor id of class to which unclassified packets are sent {0}
 r2q      DRR quantums are computed as rate in Bps/r2q {10}
 debug    string of 16 numbers each 0-3 {0}

... class add ... htb rate R1 [burst B1] [mpu B] [overhead O]
                      [prio P] [slot S] [pslot PS]
                      [ceil R2] [cburst B2] [mtu MTU] [quantum Q]
 rate     rate allocated to this class (class can still borrow)
 burst    max bytes burst which can be accumulated during idle period {computed}
 mpu      minimum packet size used in rate computations
 overhead per-packet size overhead used in rate computations
 linklay  adapting to a linklayer e.g. atm
 ceil     definite upper class rate (no borrows) {rate}
 cburst   burst but for ceil {computed}
 mtu      max packet size we create rate map for {1600}
 prio     priority of leaf; lowe

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

10 years agovirsh: check if domiftune parameters fit into UINT
Ján Tomko [Thu, 26 Jun 2014 08:06:57 +0000 (10:06 +0200)]
virsh: check if domiftune parameters fit into UINT

We parse the bandwidth rates as unsinged long long,
then try to fit them in VIR_TYPED_PARAM_UINT.

Report an error if they exceed UINT_MAX instead of
quietly using wrong values.

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

10 years agostorage: Refresh storage pool after upload
John Ferlan [Mon, 28 Jul 2014 12:39:09 +0000 (08:39 -0400)]
storage: Refresh storage pool after upload

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

Upon successful upload of a volume, the target volume and storage pool
were not updated to reflect any changes as a result of the upload. Make
use of the existing stream close callback mechanism to force a backend
pool refresh to occur in a separate thread once the stream closes. The
separate thread should avoid potential deadlocks if the refresh needed
to wait on some event from the event loop which is used to perform
the stream callback.

10 years agoPost-release version bump for new dev cycle
Eric Blake [Wed, 2 Jul 2014 06:16:13 +0000 (08:16 +0200)]
Post-release version bump for new dev cycle

Signed-off-by: Eric Blake <eblake@redhat.com>
10 years agodomtop: Remove unused variable
Michal Privoznik [Mon, 4 Aug 2014 12:40:52 +0000 (14:40 +0200)]
domtop: Remove unused variable

The variable 'k' in the print_cpu_usage function is not used anywhere
and can fire a warning on some compilers.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agodomtop: Turn parse_argv into void
Michal Privoznik [Mon, 4 Aug 2014 12:37:14 +0000 (14:37 +0200)]
domtop: Turn parse_argv into void

Currently, the function follows the usual pattern used in our code:

  int ret = -1;
  ...
  ret = 0;
 cleanup:
  return ret;

However, the function always call exit() on error, so the cleanup
label is never jumped onto. Therefore, it doesn't make any sense to
have the parse_argv function return an integer value, if it
effectively can return only value of zero.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agoqemu: fix comment in qemu.conf
Martin Kletzander [Thu, 31 Jul 2014 17:28:09 +0000 (19:28 +0200)]
qemu: fix comment in qemu.conf

There are multiple mount points after commit 725a211f, but one comment
wasn't changed to use plurals.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
10 years agoRelease of libvirt-1.2.7
Daniel Veillard [Sun, 3 Aug 2014 12:55:15 +0000 (08:55 -0400)]
Release of libvirt-1.2.7

* docs/news.html.in libvirt.spec.in: update for the release
* po/*.po*: update localizations and regenerate

10 years agobuild: fix build on cygwin
Eric Blake [Sun, 3 Aug 2014 02:47:36 +0000 (20:47 -0600)]
build: fix build on cygwin

Cygwin has getifaddrs(), but not AF_LINK, leading to:

util/virstats.c: In function 'virNetInterfaceStats':
util/virstats.c:138:41: error: 'AF_LINK' undeclared (first use in this function)
         if (ifa->ifa_addr->sa_family != AF_LINK)
...

* src/util/virstats.c (virNetInterfaceStats): Only use getifaddrs
if AF_LINK is present.

Signed-off-by: Eric Blake <eblake@redhat.com>
10 years agonetwork: always set disable_ipv6, even when it should be 0
Laine Stump [Fri, 1 Aug 2014 21:51:37 +0000 (17:51 -0400)]
network: always set disable_ipv6, even when it should be 0

libvirt previously only touched an interface's disable_ipv6 setting in
sysfs if it needed to be set to 1, assuming that 0 is the
default. Apparently that isn't always the case though (kernel 3.15.7-1
in Arch Linux reportedly defaults a new interface's disable_ipv6
setting to 1) so this patch explicitly sets it to 0 or 1 as
appropriate.

10 years agoFix a crash when cloning a volume with no backing store
Ján Tomko [Fri, 1 Aug 2014 13:24:20 +0000 (15:24 +0200)]
Fix a crash when cloning a volume with no backing store

Introduced by commit 15213d1, not yet released.

10 years agodocs: bhyve: document recent changes
Roman Bogorodskiy [Thu, 24 Jul 2014 15:52:11 +0000 (19:52 +0400)]
docs: bhyve: document recent changes

 - mention that one disk and one network limitation
   is no longer current for 1.2.6 and newer
 - add 'cdrom' device to the sample domain XML

10 years agoblockcommit: turn on active commit
Eric Blake [Wed, 18 Jun 2014 23:16:27 +0000 (17:16 -0600)]
blockcommit: turn on active commit

With this in place, I can (finally!) now do:

virsh blockcommit $dom vda --shallow --verbose --pivot

and watch qemu shorten the backing chain by one, followed by
libvirt automatically updating the dumpxml output, effectively
undoing the work of virsh snapshot-commit --no-metadata --disk-only.
Commit is SOOOO much faster than blockpull, when I'm still fairly
close in time to when the temporary qcow2 wrapper file was created
via a snapshot operation!

* src/qemu/qemu_driver.c (qemuDomainBlockCommit): Implement live
commit.

Signed-off-by: Eric Blake <eblake@redhat.com>
10 years agoblockcommit: track job type in xml
Eric Blake [Tue, 29 Jul 2014 03:46:44 +0000 (21:46 -0600)]
blockcommit: track job type in xml

A future patch is going to wire up qemu active block commit jobs;
but as they have similar events and are canceled/pivoted in the
same way as block copy jobs, it is easiest to track all bookkeeping
for the commit job by reusing the <mirror> element.  This patch
adds domain XML to track which job was responsible for creating a
mirroring situation, and adds a job='copy' attribute to all
existing uses of <mirror>.  Along the way, it also massages the
qemu monitor backend to read the new field in order to generate
the correct type of libvirt job (even though it requires a
future patch to actually cause a qemu event that can be reported
as an active commit).  It also prepares to update persistent XML
to match changes made to live XML when a copy completes.

* docs/schemas/domaincommon.rng: Enhance schema.
* docs/formatdomain.html.in: Document it.
* src/conf/domain_conf.h (_virDomainDiskDef): Add a field.
* src/conf/domain_conf.c (virDomainBlockJobType): String conversion.
(virDomainDiskDefParseXML): Parse job type.
(virDomainDiskDefFormat): Output job type.
* src/qemu/qemu_process.c (qemuProcessHandleBlockJob): Distinguish
active from regular commit.
* src/qemu/qemu_driver.c (qemuDomainBlockCopy): Set job type.
(qemuDomainBlockPivot, qemuDomainBlockJobImpl): Clean up job type
on completion.
* tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-mirror-old.xml:
Update tests.
* tests/qemuxml2argvdata/qemuxml2argv-disk-mirror.xml: Likewise.
* tests/qemuxml2argvdata/qemuxml2argv-disk-active-commit.xml: New
file.
* tests/qemuxml2xmltest.c (mymain): Drive new test.

Signed-off-by: Eric Blake <eblake@redhat.com>
10 years agoDomain config: write <features/> if some capabilities are set.
Cédric Bosdonnat [Wed, 30 Jul 2014 09:20:59 +0000 (11:20 +0200)]
Domain config: write <features/> if some capabilities are set.

If all features are set to default (including the capabilities policy),
but some capabilities are toggled, we need to output the <features>
element when formatting the config.

10 years agodocs: fix an incorrect example for memoryBacking
Chen Hanxiao [Wed, 30 Jul 2014 03:03:15 +0000 (11:03 +0800)]
docs: fix an incorrect example for memoryBacking

commit 136ad49740f017aabcac48d02d2df6ab7b0195e9
forgot to add an end-tags for hugepages.

Signed-off-by: Chen Hanxiao <chenhanxiao@cn.fujitsu.com>
10 years agoblockjob: properly track blockcopy xml changes on disk
Eric Blake [Tue, 29 Jul 2014 20:42:45 +0000 (14:42 -0600)]
blockjob: properly track blockcopy xml changes on disk

We were not directly saving the domain XML to file after starting
or finishing a blockcopy.  Without the startup write, a libvirtd
restart in the middle of a copy job would forget that the job was
underway.  Then at pivot, we were indirectly writing new XML in
reaction to events that occur as we stop and restart the guest CPUs.
But there was a race: since pivot is an async action, it is possible
that libvirtd is restarted before the pivot completes, so if XML
changes during the event, that change was not written.  The original
blockcopy code cleared out the <mirror> element prior to restarting
the CPUs, but this is also a race, observed if a user does an async
pivot and a dumpxml before the event occurs.  Furthermore, this race
will interfere with active commit in a future patch, because that
code will rely on the <mirror> element at the time of the qemu event
to determine whether to inform the user of a normal commit or an
active commit.

Fix things by saving state any time we modify live XML, while
delaying XML disk modifications until after the event completes.  We
still need a to teach libvirtd restarts to examine all existing
<mirror> elements to see if the job completed in the meantime (that
is, if libvirtd misses the event, the updated state still needs to be
updated in live XML), but that will be a later patch, in part because
we also need to to start taking advantage of newer qemu's ability to
keep the job around after completion rather than the current usage
where the job disappears both on error and on success.

* src/qemu/qemu_driver.c (qemuDomainBlockCopy): Track XML change
on disk.
(qemuDomainBlockJobImpl, qemuDomainBlockPivot): Move job-end XML
rewrites...
* src/qemu/qemu_process.c (qemuProcessHandleBlockJob): ...here.

Signed-off-by: Eric Blake <eblake@redhat.com>
10 years agoblockcopy: add more XML for state tracking
Eric Blake [Mon, 28 Jul 2014 22:25:28 +0000 (16:25 -0600)]
blockcopy: add more XML for state tracking

Doing a blockcopy operation across a libvirtd restart is not very
robust at the moment.  In particular, we are clearing the <mirror>
element prior to telling qemu to finish the job.  Also, thanks to the
ability to request async completion, the user can easily regain
control prior to qemu actually finishing the effort, and they should
be able to poll the domain XML to see if the job is still going.

A future patch will fix things to actually wait until qemu is done
before modifying the XML to reflect the job completion.  But since
qemu issues identical BLOCK_JOB_COMPLETE events regardless of whether
the job was cancelled (kept the original disk) or completed (pivoted
to the new disk), we have to track which of the two operations were
used to end the job.  Furthermore, we'd like to avoid attempts to
end a job where we are already waiting on an earlier request to qemu
to end the job.  Likewise, if we miss the qemu event (perhaps because
it arrived during a libvirtd restart), we still need enough state
recorded to be able to determine how to modify the domain XML once
we reconnect to qemu and manually learn whether the job still exists.

Although this patch doesn't actually fix the problem, it is a
preliminary step that makes it possible to track whether a job
has already begun steps towards completion.

* src/conf/domain_conf.h (virDomainDiskMirrorState): New enum.
(_virDomainDiskDef): Convert bool mirroring to new enum.
* src/conf/domain_conf.c (virDomainDiskDefParseXML)
(virDomainDiskDefFormat): Handle new values.
* src/qemu/qemu_process.c (qemuProcessHandleBlockJob): Adjust
client.
* src/qemu/qemu_driver.c (qemuDomainBlockPivot)
(qemuDomainBlockJobImpl): Likewise.
* docs/schemas/domaincommon.rng (diskMirror): Expose new values.
* docs/formatdomain.html.in (elementsDisks): Document it.
* tests/qemuxml2argvdata/qemuxml2argv-disk-mirror.xml: Test it.

Signed-off-by: Eric Blake <eblake@redhat.com>
10 years agoqemu: error out if PCI passthrough type is not supported
Hu Tao [Mon, 28 Jul 2014 08:45:23 +0000 (16:45 +0800)]
qemu: error out if PCI passthrough type is not supported

If PCI passthrough type is not supported, we should error out rather than
continue building the command line.

When starting a domain, the type has been already checked by
qemuPrepareHostdevPCICheckSupport() before building qemu command line,
so the problem doesn't emerge.

But when coverting a domain xml without specifying passthrough type explictly
to qemu arg, we will get a malformed command line.

the xml:

    <hostdev mode='subsystem' type='pci' managed='yes'>
      <source>
        <address domain='0x0001' bus='0x03' slot='0x00' function='0x0'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </hostdev>

the converted command line:

  -device ,host=0001:03:00.0,id=hostdev0,bus=pci.0,addr=0x5

After this patch, virsh gives an error message:

  virsh domxml-to-native qemu-argv /tmp/tmp.xml
  error: internal error: invalid PCI passthrough type 'default'

Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
10 years agoqemu: Implement ./hugepages/page/[@size, @unit, @nodeset]
Michal Privoznik [Wed, 23 Jul 2014 15:37:21 +0000 (17:37 +0200)]
qemu: Implement ./hugepages/page/[@size, @unit, @nodeset]

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agodomain: Introduce ./hugepages/page/[@size, @unit, @nodeset]
Michal Privoznik [Wed, 23 Jul 2014 15:37:20 +0000 (17:37 +0200)]
domain: Introduce ./hugepages/page/[@size, @unit, @nodeset]

  <memoryBacking>
    <hugepages>
      <page size="1" unit="G" nodeset="0-3,5"/>
      <page size="2" unit="M" nodeset="4"/>
    </hugepages>
  </memoryBacking>

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agovirbitmap: Introduce virBitmapOverlaps
Michal Privoznik [Wed, 23 Jul 2014 15:37:19 +0000 (17:37 +0200)]
virbitmap: Introduce virBitmapOverlaps

This internal API just checks if two bitmaps intersect or not.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agoqemu: Utilize virFileFindHugeTLBFS
Michal Privoznik [Wed, 23 Jul 2014 15:37:18 +0000 (17:37 +0200)]
qemu: Utilize virFileFindHugeTLBFS

Use better detection of hugetlbfs mount points. Yes, there can be
multiple mount points each serving different huge page size.

Since we already have ability to override the mount point in the
qemu.conf file, this crazy backward compatibility code is brought in.
Now we allow multiple mount points, so the "hugetlbfs_mount" option
must take an list of strings (mount points). But previously, it was
just a string, so we must accept both types now.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agoIntroduce virFileFindHugeTLBFS
Michal Privoznik [Wed, 23 Jul 2014 15:37:17 +0000 (17:37 +0200)]
Introduce virFileFindHugeTLBFS

This should iterate over mount tab and search for hugetlbfs among with
looking for the default value of huge pages.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agostorage: create: Create files with correct mode
Peter Krempa [Mon, 28 Jul 2014 14:09:39 +0000 (16:09 +0200)]
storage: create: Create files with correct mode

Use correct mode when pre-creating files (for snapshots). The refactor
changing to storage driver usage caused a regression as some systems
created the file with 000 permissions forbidding qemu to write the file.

Pass mode to the creating functions to avoid the problem.

Regression since 185e07a5f82bc0692324f3ee13b4816d71b653c1.

10 years agoschema: bhyve and nmdm updates
Roman Bogorodskiy [Fri, 25 Jul 2014 16:43:49 +0000 (20:43 +0400)]
schema: bhyve and nmdm updates

* docs/schemas/domaincommon.rng: Add bhyve domain type, nmdm
  serial type and master and slave optional attributes for
  serial that are used by nmdm
* tests/domainschematest: Add bhyvexml2argvdata directory
  to validate bhyve XMLs

10 years agonodedev: fix a uninitialized variable build failure
Chen Hanxiao [Tue, 29 Jul 2014 02:05:08 +0000 (10:05 +0800)]
nodedev: fix a uninitialized variable build failure

Fix a -Werror=maybe-uninitialized warning

Signed-off-by: Chen Hanxiao <chenhanxiao@cn.fujitsu.com>
Signed-off-by: Eric Blake <eblake@redhat.com>
10 years agonodedev: fix pci express memory leak
Eric Blake [Wed, 23 Jul 2014 04:38:30 +0000 (22:38 -0600)]
nodedev: fix pci express memory leak

Leak introduced in commit 16ebf10f (v1.2.6), detected by valgrind:

==9816== 216 (96 direct, 120 indirect) bytes in 6 blocks are definitely lost in loss record 665 of 821
==9816==    at 0x4A081D4: calloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==9816==    by 0x50836FB: virAlloc (viralloc.c:144)
==9816==    by 0x1DBDBE27: udevProcessPCI (node_device_udev.c:546)
==9816==    by 0x1DBDD79D: udevGetDeviceDetails (node_device_udev.c:1293)

* src/util/virpci.h (virPCIEDeviceInfoFree): New prototype.
* src/util/virpci.c (virPCIEDeviceInfoFree): New function.
* src/conf/node_device_conf.c (virNodeDevCapsDefFree): Clear
pci_express under pci case.
(virNodeDevCapPCIDevParseXML): Avoid leak.
* src/node_device/node_device_udev.c (udevProcessPCI): Likewise.
* src/libvirt_private.syms (virpci.h): Export it.

Signed-off-by: Eric Blake <eblake@redhat.com>
10 years agonodedev: move pci express types to virpci.h
Eric Blake [Thu, 24 Jul 2014 01:52:22 +0000 (19:52 -0600)]
nodedev: move pci express types to virpci.h

Finding virPCIE* code is more intuitive if located in virpci.h
instead of node_device_conf.h.

* src/conf/node_device_conf.h (virPCIELinkSpeed, virPCIELink)
(virPCIEDeviceInfo): Move...
* src/util/virpci.h: ...here.
* src/conf/node_device_conf.c (virPCIELinkSpeed): Likewise.

Signed-off-by: Eric Blake <eblake@redhat.com>
10 years agonodedev: let compiler help us on switches
Eric Blake [Thu, 24 Jul 2014 02:20:22 +0000 (20:20 -0600)]
nodedev: let compiler help us on switches

The compiler can alert us to places where we need to expand switch
statements because we add a new enum value, but only if we don't
have a default case.

* src/conf/node_device_conf.c (virNodeDeviceDefFormat)
(virNodeDevCapsDefParseXML, virNodeDevCapsDefFree): Drop default
case.

Signed-off-by: Eric Blake <eblake@redhat.com>
10 years agoqemu: sound: Fix uninitialized model string
Peter Krempa [Mon, 28 Jul 2014 09:38:35 +0000 (11:38 +0200)]
qemu: sound: Fix uninitialized model string

Commit e5f36698e3efc3d258b2996c7423c47e05ec52b2 introduces a
false-positive build failure in the sound card model handling switch.
Initialize the model to NULL although the value should never be used.

10 years agoqemu: sound: Handle all possible sound cards in switch statement
Peter Krempa [Fri, 25 Jul 2014 08:24:40 +0000 (10:24 +0200)]
qemu: sound: Handle all possible sound cards in switch statement

Use correct type in the switch and handle all sound card models in it so
that the compiler tracks additions.

10 years agoconf: RNG: Always fill in default random source path for default backend
Peter Krempa [Fri, 25 Jul 2014 08:00:49 +0000 (10:00 +0200)]
conf: RNG: Always fill in default random source path for default backend

Libvirt documents that the default entropy source for the 'random'
backend of a RNG device is /dev/random. Instead of storing and
propagating NULL across our code and checking it in multiple places fill
the default in the post parse callback and use that in the other places.

10 years agospec: arm and aarch64 have kvm support with F20+
Cole Robinson [Fri, 18 Jul 2014 17:16:35 +0000 (13:16 -0400)]
spec: arm and aarch64 have kvm support with F20+

10 years agospec: Use power64 macro
Cole Robinson [Fri, 18 Jul 2014 17:15:45 +0000 (13:15 -0400)]
spec: Use power64 macro

Covers the whole ppc64 family. Example bug for binutils:

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

10 years agoqemu: Fix starting of VMs with empty CDROM drives
Peter Krempa [Fri, 25 Jul 2014 11:15:47 +0000 (13:15 +0200)]
qemu: Fix starting of VMs with empty CDROM drives

Since 24e5cafba6dbc2722e05f92dc0ae31b0f938f9f0 (thankfully unreleased)
when a VM with an empty disk drive would be started the code would call
stat() on NULL path as a check was missing from the callback rendering
machines unstartable.

Report success when the path is empty (denoting an empty drive).

10 years agolibvirt-guests: fix some typos in a comment
Martin Kletzander [Fri, 25 Jul 2014 09:46:10 +0000 (11:46 +0200)]
libvirt-guests: fix some typos in a comment

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
10 years agoutil: virTimeFieldsThenRaw never returns negative
James [Fri, 25 Jul 2014 08:13:57 +0000 (16:13 +0800)]
util: virTimeFieldsThenRaw never returns negative

virTimeFieldsThenRaw will never return negative result, so I clean up
the related meaningless judgements to make it better.

Signed-off-by: James <james.wangyufei@huawei.com>
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
10 years agolibvirt: Fix 'quest' typo in comment
Li Yang [Fri, 25 Jul 2014 07:53:45 +0000 (03:53 -0400)]
libvirt: Fix 'quest' typo in comment

Signed-off-by: Li Yang <liyang.fnst@cn.fujitsu.com>
10 years agotest: qemu: Add tests for multiple virtio-rng devices
Peter Krempa [Thu, 24 Jul 2014 13:15:20 +0000 (15:15 +0200)]
test: qemu: Add tests for multiple virtio-rng devices

10 years agovirtio-rng: allow multiple RNG devices
Peter Krempa [Mon, 25 Feb 2013 22:31:11 +0000 (23:31 +0100)]
virtio-rng: allow multiple RNG devices

qemu supports adding multiple RNG devices. This patch allows libvirt to
support this.

10 years agoqemu: cgroup: Don't use NULL path on default backed RNGs
Peter Krempa [Thu, 24 Jul 2014 13:47:39 +0000 (15:47 +0200)]
qemu: cgroup: Don't use NULL path on default backed RNGs

The "random" backend for virtio-rng can be started with no path
specified which equals to /dev/random. The cgroup code didn't consider
this and called few of the functions with NULL resulting into:

 $ virsh start rng-vm
 error: Failed to start domain rng-vm
 error: Path '(null)' is not accessible: Bad address

Problem introduced by commit c6320d34637a9883e31c4081d418fc33a4277cf2

10 years agoqemuConnectGetDomainCapabilities: Report error on unknown arch
Michal Privoznik [Thu, 24 Jul 2014 14:40:01 +0000 (16:40 +0200)]
qemuConnectGetDomainCapabilities: Report error on unknown arch

If user hasn't provided any @emulatorbin, the qemuCaps are
searched by @arch provided (which in fact can be guessed from the
host). However, there's no guarantee that the qemu binary for
@arch will exist.  Therefore qemu capabilities may be nonexistent
too. If that's the case, we should throw an error message prior
jumping onto 'cleanup' label as the helper lookup function
remains silent on no search result.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agoremove range checking for blkiotune weight
Martin Kletzander [Thu, 24 Jul 2014 11:43:47 +0000 (13:43 +0200)]
remove range checking for blkiotune weight

This was changed before:

https://www.redhat.com/archives/libvir-list/2013-October/msg00525.html

but not everywhere in the code.

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

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
10 years agobhyve: cdrom support
Roman Bogorodskiy [Sat, 19 Jul 2014 15:15:26 +0000 (19:15 +0400)]
bhyve: cdrom support

Add support for CDROM devices for bhyve driver using
bhyve(8)'s 'ahci-cd' device type.

As bhyve currently does not support media insertion at runtime,
disallow to start a domain with an empty source path for cdrom
devices.

10 years agovirsh: add option for selecting domdisplay type
Martin Kletzander [Thu, 24 Jul 2014 12:23:12 +0000 (14:23 +0200)]
virsh: add option for selecting domdisplay type

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

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
10 years agovirsh: add error message when no graphical display is found
Martin Kletzander [Thu, 24 Jul 2014 12:18:23 +0000 (14:18 +0200)]
virsh: add error message when no graphical display is found

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
10 years agohostdev: Introduce virDomainHostdevSubsysSCSIiSCSI
John Ferlan [Wed, 9 Jul 2014 13:31:38 +0000 (09:31 -0400)]
hostdev: Introduce virDomainHostdevSubsysSCSIiSCSI

Create the structures and API's to hold and manage the iSCSI host device.
This extends the 'scsi_host' definitions added in commit id '5c811dce'.
A future patch will add the XML parsing, but that code requires some
infrastructure to be in place first in order to handle the differences
between a 'scsi_host' and an 'iSCSI host' device.

10 years agoAdd virConnectPtr for qemuBuildSCSIHostdevDrvStr
John Ferlan [Thu, 10 Jul 2014 15:16:15 +0000 (11:16 -0400)]
Add virConnectPtr for qemuBuildSCSIHostdevDrvStr

Add a conn for future patches to be able to grab the secret when
authenticating an iSCSI host device

10 years agohostdev: Introduce virDomainHostdevSubsysSCSIHost
John Ferlan [Fri, 20 Jun 2014 15:35:46 +0000 (11:35 -0400)]
hostdev: Introduce virDomainHostdevSubsysSCSIHost

Split virDomainHostdevSubsysSCSI further. In preparation for having
either SCSI or iSCSI data, create a union in virDomainHostdevSubsysSCSI
to contain just a virDomainHostdevSubsysSCSIHost to describe the
'scsi_host' host device

10 years agohostdev: Introduce virDomainHostdevSubsysSCSI
John Ferlan [Thu, 3 Jul 2014 21:01:10 +0000 (17:01 -0400)]
hostdev: Introduce virDomainHostdevSubsysSCSI

Create a separate typedef for the hostdev union data describing SCSI
Then adjust the code to use the new pointer

10 years agohostdev: Introduce virDomainHostdevSubsysPCI
John Ferlan [Thu, 3 Jul 2014 20:31:39 +0000 (16:31 -0400)]
hostdev: Introduce virDomainHostdevSubsysPCI

Create a separate typedef for the hostdev union data describing PCI.
Then adjust the code to use the new pointer

10 years agohostdev: Introduce virDomainHostdevSubsysUSB
John Ferlan [Thu, 3 Jul 2014 19:43:05 +0000 (15:43 -0400)]
hostdev: Introduce virDomainHostdevSubsysUSB

Create a separate typedef for the hostdev union data describing USB.
Then adjust the code to use the new pointer

10 years agoqemu: snapshot: Use storage driver to pre-create snapshot file
Peter Krempa [Mon, 30 Jun 2014 14:46:00 +0000 (16:46 +0200)]
qemu: snapshot: Use storage driver to pre-create snapshot file

Move the last operation done on local files to the storage driver API.

10 years agostorage: Implement virStorageFileCreate for local and gluster files
Peter Krempa [Mon, 30 Jun 2014 13:05:07 +0000 (15:05 +0200)]
storage: Implement virStorageFileCreate for local and gluster files

Add backends for this frontend function so that we can use it in the
snapshot creation code.

10 years agoqemu: Implement DAC driver chown callback to co-operate with storage drv
Peter Krempa [Thu, 10 Jul 2014 13:46:01 +0000 (15:46 +0200)]
qemu: Implement DAC driver chown callback to co-operate with storage drv

Use the storage driver to chown remote images.

10 years agosecurity: DAC: Plumb usage of chown callback
Peter Krempa [Thu, 10 Jul 2014 14:05:07 +0000 (16:05 +0200)]
security: DAC: Plumb usage of chown callback

Use the callback to set disk and storage image labels by modifying the
existing functions and adding wrappers to avoid refactoring a lot of the
code.

10 years agosecurity: DAC: Introduce callback to perform image chown
Peter Krempa [Thu, 10 Jul 2014 12:17:24 +0000 (14:17 +0200)]
security: DAC: Introduce callback to perform image chown

To integrate the security driver with the storage driver we need to
pass a callback for a function that will chown storage volumes.

Introduce and document the callback prototype.