1. 09 8月, 2014 7 次提交
  2. 08 8月, 2014 8 次提交
    • P
      e260a0e6
    • J
      qemu: Remove extraneous space in function prototypes · 2e194e5b
      John Ferlan 提交于
      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: NJohn Ferlan <jferlan@redhat.com>
      2e194e5b
    • J
      hostdev: Add iSCSI hostdev XML · 54ac483e
      John Ferlan 提交于
      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.
      54ac483e
    • J
      domain_conf: Common routine to handle network storage host xml def · c3f49429
      John Ferlan 提交于
      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.
      c3f49429
    • E
      blockjob: fix use-after-free in blockcopy · 265680c5
      Eric Blake 提交于
      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: NEric Blake <eblake@redhat.com>
      265680c5
    • E
      blockjob: avoid memory leak during block pivot · a595a005
      Eric Blake 提交于
      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 9944b710 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: NEric Blake <eblake@redhat.com>
      a595a005
    • E
      docs: use unique dev names in <disk> examples · 4cf53158
      Eric Blake 提交于
      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: NEric Blake <eblake@redhat.com>
      4cf53158
    • L
      virsh: clean up attach-interface paragraph in man page · f91aa931
      Laine Stump 提交于
      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)
      f91aa931
  3. 07 8月, 2014 2 次提交
  4. 06 8月, 2014 5 次提交
  5. 05 8月, 2014 1 次提交
  6. 04 8月, 2014 7 次提交
    • J
      Don't overwrite errors from virNetDevBandwidthSet · 6dac5d06
      Ján Tomko 提交于
      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
      6dac5d06
    • J
      virsh: check if domiftune parameters fit into UINT · ee668206
      Ján Tomko 提交于
      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
      ee668206
    • J
      storage: Refresh storage pool after upload · 4a85bf3e
      John Ferlan 提交于
      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.
      4a85bf3e
    • E
      Post-release version bump for new dev cycle · e3e1e52a
      Eric Blake 提交于
      Signed-off-by: NEric Blake <eblake@redhat.com>
      e3e1e52a
    • M
      domtop: Remove unused variable · dc64be90
      Michal Privoznik 提交于
      The variable 'k' in the print_cpu_usage function is not used anywhere
      and can fire a warning on some compilers.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      dc64be90
    • M
      domtop: Turn parse_argv into void · 859aa405
      Michal Privoznik 提交于
      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: NMichal Privoznik <mprivozn@redhat.com>
      859aa405
    • M
      qemu: fix comment in qemu.conf · b2574b47
      Martin Kletzander 提交于
      There are multiple mount points after commit 725a211f, but one comment
      wasn't changed to use plurals.
      Signed-off-by: NMartin Kletzander <mkletzan@redhat.com>
      b2574b47
  7. 03 8月, 2014 3 次提交
    • D
      Release of libvirt-1.2.7 · 21b59b65
      Daniel Veillard 提交于
      * docs/news.html.in libvirt.spec.in: update for the release
      * po/*.po*: update localizations and regenerate
      21b59b65
    • E
      build: fix build on cygwin · 478d93ad
      Eric Blake 提交于
      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: NEric Blake <eblake@redhat.com>
      478d93ad
    • L
      network: always set disable_ipv6, even when it should be 0 · c0788af0
      Laine Stump 提交于
      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.
      c0788af0
  8. 01 8月, 2014 1 次提交
  9. 30 7月, 2014 6 次提交
    • R
      docs: bhyve: document recent changes · 221b1828
      Roman Bogorodskiy 提交于
       - 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
      221b1828
    • E
      blockcommit: turn on active commit · cfb16b8e
      Eric Blake 提交于
      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: NEric Blake <eblake@redhat.com>
      cfb16b8e
    • E
      blockcommit: track job type in xml · 232a31be
      Eric Blake 提交于
      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: NEric Blake <eblake@redhat.com>
      232a31be
    • C
      Domain config: write <features/> if some capabilities are set. · 251d75a8
      Cédric Bosdonnat 提交于
      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.
      251d75a8
    • C
      docs: fix an incorrect example for memoryBacking · 24c55ee0
      Chen Hanxiao 提交于
      commit 136ad497
      forgot to add an end-tags for hugepages.
      Signed-off-by: NChen Hanxiao <chenhanxiao@cn.fujitsu.com>
      24c55ee0
    • E
      blockjob: properly track blockcopy xml changes on disk · febf84c2
      Eric Blake 提交于
      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: NEric Blake <eblake@redhat.com>
      febf84c2