1. 10 4月, 2012 4 次提交
  2. 06 4月, 2012 4 次提交
    • E
      snapshot: fix memory leak on error · 14135609
      Eric Blake 提交于
      Leak introduced in commit 0436d328.  If we allocate an actions array,
      but fail early enough to never consume it with the qemu monitor
      transaction call, we leaked memory.
      
      But our semantics of making the transaction command free the caller's
      memory is awkward; avoiding the memory leak requires making every
      intermediate function in the call chain check for error.  It is much
      easier to fix things so that the function that allocates also frees,
      while the call chain leaves the caller's data intact.  To do that,
      I had to hack our JSON data structure to make it easy to protect a
      portion of an arbitrary JSON tree from being freed.
      
      * src/util/json.h (virJSONType): Name the enum.
      (_virJSONValue): New field.
      * src/util/json.c (virJSONValueFree): Use it to protect a portion
      of an array.
      * src/qemu/qemu_monitor_json.c (qemuMonitorJSONTransaction): Avoid
      freeing caller's data.
      * src/qemu/qemu_driver.c (qemuDomainSnapshotCreateDiskActive):
      Free actions array on failure.
      14135609
    • M
      qemu_ga: Don't overwrite errors on FSThaw · 650da0e9
      Michal Privoznik 提交于
      We can tell qemuDomainSnapshotFSThaw if we want it to report errors or
      not. However, if we don't want to and an error has been already set by
      previous qemuReportError() we must keep copy of that error not just a
      pointer to it. Otherwise, it get overwritten if FSThaw reports an error.
      650da0e9
    • S
      xen config: No vfb in HVM guest configuration · fb98da00
      Stefan Bader 提交于
      This causes an implicit vkbd device to be added which takes
      6min to finally fail being initialized in the guest.
      
      http://lists.xen.org/archives/html/xen-devel/2012-04/msg00409.htmlSigned-off-by: NStefan Bader <stefan.bader@canonical.com>
      fb98da00
    • G
      virURIParse: don't forget to copy the user part · 4eb1c256
      Guido Günther 提交于
      This got dropped with 300e60e1
      
      Cheers,
       -- Guido
      4eb1c256
  3. 05 4月, 2012 2 次提交
    • A
      conf: Plug memory leaks on virDomainDiskDefParseXML · 80d476a9
      Alex Jia 提交于
      Detected by valgrind. Leaks are introduced in commit b22eaa75.
      
      * src/conf/domain_conf.c (virDomainDiskDefParseXML): fix memory leaks.
      
      How to reproduce?
      
      % make && make -C tests check TESTS=qemuxml2argvtest
      % cd tests && valgrind -v --leak-check=full ./qemuxml2argvtest
      
      actual result:
      
      ==2143== 12 bytes in 2 blocks are definitely lost in loss record 74 of 179
      ==2143==    at 0x4A05FDE: malloc (vg_replace_malloc.c:236)
      ==2143==    by 0x39D90A67DD: xmlStrndup (xmlstring.c:45)
      ==2143==    by 0x4F5EC0: virDomainDiskDefParseXML (domain_conf.c:3438)
      ==2143==    by 0x502F00: virDomainDefParseXML (domain_conf.c:8304)
      ==2143==    by 0x505FE3: virDomainDefParseNode (domain_conf.c:9080)
      ==2143==    by 0x5069AE: virDomainDefParse (domain_conf.c:9030)
      ==2143==    by 0x41CBF4: testCompareXMLToArgvHelper (qemuxml2argvtest.c:105)
      ==2143==    by 0x41E5DD: virtTestRun (testutils.c:145)
      ==2143==    by 0x416FA3: mymain (qemuxml2argvtest.c:399)
      ==2143==    by 0x41DCB7: virtTestMain (testutils.c:700)
      ==2143==    by 0x39CF01ECDC: (below main) (libc-start.c:226)
      Signed-off-by: NAlex Jia <ajia@redhat.com>
      80d476a9
    • I
      openvz: support vzctl 3.1 · 37075dfe
      Ilja Livenson 提交于
      https://bugzilla.redhat.com/show_bug.cgi?id=809895
      
      Basically, openvz dropped strict version numbering (3.1 vs 3.1.0),
      which caused parsing to fail.
      37075dfe
  4. 04 4月, 2012 4 次提交
  5. 03 4月, 2012 1 次提交
    • J
      qemu: Start nested job in qemuDomainCheckEjectableMedia · 66cab01a
      Jiri Denemark 提交于
      Originally, qemuDomainCheckEjectableMedia was entering monitor with qemu
      driver lock. Commit 2067e31b, which I
      made to fix that, revealed another issue we had (but didn't notice it
      since the driver was locked): we didn't set nested job when
      qemuDomainCheckEjectableMedia is called during migration. Thus the
      original fix I made was wrong.
      66cab01a
  6. 02 4月, 2012 4 次提交
    • P
      Xen: Fix <clock> handling · 11ec6bd8
      Philipp Hahn 提交于
      XenD-3.1 introduced managed domains. HV-domains have rtc_timeoffset
      (hgd24f37b31030 from 2007-04-03), which tracks the offset between the
      hypervisors clock and the domains RTC, and is persisted by XenD.
      In combination with localtime=1 this had a bug until XenD-3.4
      (hg5d701be7c37b from 2009-04-01) (I'm not 100% sure how that bug
      manifests, but at least for me in TZ=Europe/Berlin I see the previous
      offset relative to utc being applied to localtime again, which manifests
      in an extra hour being added)
      
      XenD implements the following variants for clock/@offset:
      - PV domains don't have a RTC → 'localtime' | 'utc'
      - <3.1: no managed domains → 'localtime' | 'utc'
      - ≥3.1: the offset is tracked for HV → 'variable'
              due to the localtime=1 bug → 'localtime' | 'utc'
      - ≥3.4: the offset is tracked for HV → 'variable'
      
      Current libvirtd still thinks XenD only implements <clock offset='utc'/>
      and <clock offset='localtime'/>, which is wrong, since the semantic of
      'utc' and 'localtime' specifies, that the offset will be reset on
      domain-restart, while with 'variable' the offset is kept. (keeping the
      offset over "virsh edit" is important, since otherwise the clock might
      jump, which confuses certain guest OSs)
      
      xendConfigVersion was last incremented to 4 by the xen-folks for
      xen-3.1.0. I know of no way to reliably detect the version of XenD
      (user space tools), which may be different from the version of the
      hypervisor (kernel) version! Because of this only the change from
      'utc'/'localtime' to 'variable' in XenD-3.1 is handled, not the buggy
      behaviour of XenD-3.1 until XenD-3.4.
      
      For backward compatibility with previous versions of libvirt Xen-HV
      still accepts 'utc' and 'localtime', but they are returned as 'variable'
      on the next read-back from Xend to libvirt, since this is what XenD
      implements: The RTC is NOT reset back to the specified time on next
      restart, but the previous offset is kept.
      This behaviour can be turned off by adding the additional attribute
      adjustment='reset', in which case libvirt will report an error instead
      of doing the conversion. The attribute can also be used as a shortcut to
      offset='variable' with basis='...'.
      
      With these changes, it is also necessary to adjust the xen tests:
      
      "localtime = 0" is always inserted, because otherwise on updates the
      value is not changed within XenD.
      
      adjustment='reset' is inserted for all cases, since they're all <
      XEND_CONFIG_VERSION_3_1_0, only 3.1 introduced persistent
      rtc_timeoffset.
      
      Some statements change their order because code was moved around.
      Signed-off-by: NPhilipp Hahn <hahn@univention.de>
      11ec6bd8
    • P
      Support clock=variable relative to localtime · b8bf79aa
      Philipp Hahn 提交于
      Since Xen 3.1 the clock=variable semantic is supported. In addition to
      qemu/kvm Xen also knows about a variant where the offset is relative to
      'localtime' instead of 'utc'.
      
      Extends the libvirt structure with a flag 'basis' to specify, if the
      offset is relative to 'localtime' or 'utc'.
      
      Extends the libvirt structure with a flag 'reset' to force the reset
      behaviour of 'localtime' and 'utc'; this is needed for backward
      compatibility with previous versions of libvirt, since they report
      incorrect XML.
      
      Adapt the only user 'qemu' to the new name.
      Extend the RelaxNG schema accordingly.
      Document the new 'basis' attribute in the HTML documentation.
      Adapt test for the new attribute.
      Signed-off-by: NPhilipp Hahn <hahn@univention.de>
      b8bf79aa
    • Y
      Fix typos and spacing in messages. · 867ed7bb
      Yuri Chornoivan 提交于
      867ed7bb
    • L
      qemu: fix memory leak in virDomainGetVcpus · a4650316
      Laine Stump 提交于
      https://bugzilla.redhat.com/show_bug.cgi?id=808979
      
      The leak is really in virProcessInfoGetAffinity, as shown in the
      valgrind output given in the above bug report - it calls CPU_ALLOC(),
      but then fails to call CPU_FREE().
      
      This leak has existed in every version of libvirt since 0.7.5.
      a4650316
  7. 31 3月, 2012 9 次提交
    • E
      conf: allow fuzz in XML with cur balloon > max · d400b8fb
      Eric Blake 提交于
      Commit 1b1402b9 introduced a regression.  Since older libvirt versions
      would silently round memory up (until the previous patch), but populated
      current memory based on querying the guest, it was possible to have
      dumpxml show cur > max by the amount of the rounding.  For example, if
      a user requested 1048570 KiB memory (just shy of 1GiB), the qemu
      driver would actually run with 1048576 KiB, and libvirt 0.9.10 would
      output a current that was 6KiB larger than the maximum.  Situations
      where this could have an impact include, but are not limited to,
      migration from old to new libvirt, managedsave in old libvirt and
      start in new libvirt, snapshot creation in old libvirt and revert in
      new libvirt - without this patch, the new libvirt would reject the
      VM because of the rounding discrepancy.
      
      Fix things by adding a fuzz factor, and silently clamp current down to
      maximum in that case, rather than failing to reparse XML for an existing
      VM.  From a practical standpoint, this has no user impact: 'virsh
      dumpxml' will continue to query the running guest rather than rely on
      the incoming xml, which will see the currect current value, and even if
      clamping down occurs during parsing, it will be by at most the fuzz
      factor of a megabyte alignment, and rounded back up when passed back to
      the hypervisor.
      
      Meanwhile, we continue to reject cur > max if the difference is beyond
      the fuzz factor of nearest megabyte.  But this is not a real change in
      behavior, since with 0.9.10, even though the parser allowed it, later
      in the processing stream we would reject it at the qemu layer; so
      rejecting it in the parser just moves error detection to a nicer place.
      
      * src/conf/domain_conf.c (virDomainDefParseXML): Don't reject
      existing XML.
      Based on a report by Zhou Peng.
      d400b8fb
    • E
      qemu: reflect any memory rounding back to xml · 095b0bc4
      Eric Blake 提交于
      If we round up a user's memory request, we should update the XML
      to reflect the actual value in use by the VM, rather than giving
      an artificially small value back to the user.
      
      * src/qemu/qemu_command.c (qemuBuildNumaArgStr)
      (qemuBuildCommandLine): Reflect rounding back to XML.
      095b0bc4
    • H
      qemu: support live change of the bridge used by a guest network device · 2711ac87
      Hendrik Schwartke 提交于
      This patch was created to resolve this upstream bug:
      
        https://bugzilla.redhat.com/show_bug.cgi?id=784767
      
      and is at least a partial solution to this RHEL RFE:
      
        https://bugzilla.redhat.com/show_bug.cgi?id=805071
      
      Previously the only attribute of a network device that could be
      modified by virUpdateDeviceFlags() ("virsh update-device") was the
      link state; attempts to change any other attribute would log an error
      and fail.
      
      This patch adds recognition of a change in bridge device name, and
      supports reconnecting the guest's interface to the new device.
      Standard audit logs for detaching and attaching a network device are
      also generated. Although the current auditing function doesn't log the
      bridge being attached to, this will later be changed in a separate
      patch.
      2711ac87
    • E
      build: fix build on cygwin · 87681495
      Eric Blake 提交于
      Regression introduced when we changed types in commit 3e2c3d8f.
      
      We've done this sort of cleanup before (see commit c685993d).
      
      * src/conf/storage_conf.c (virStoragePoolDefFormat)
      (virStorageVolTargetDefFormat): Cast gid_t and uid_t.
      87681495
    • E
      build: fix mingw ssize_t, syntax check · 1012dc29
      Eric Blake 提交于
      We are so close to a release that we don't want to pull in a
      gnulib submodule update and risk regressions, since there has
      been a lot of other gnulib churn upstream.  However, there are
      a couple of gnulib issues that are worth fixing in isolation,
      by applying local patches to gnulib.
      
      There was an upstream gnulib bug in maint.mk that rendered most
      of our syntax checks ineffective (and fixing it flushed out a
      minor bug in our code):
      https://lists.gnu.org/archive/html/bug-gnulib/2012-03/msg00194.html
      
      There is still an upstream bug where gnulib uses the wrong type
      for ssize_t on mingw; we need the fix now even though it has not
      yet been accepted into gnulib:
      https://lists.gnu.org/archive/html/bug-gnulib/2012-03/msg00188.html
      
      * gnulib/local/top/maint.mk.diff: Pick up upstream gnulib
      maint.mk.
      * gnulib/local/m4/ssize_t.m4.diff: Work around gnulib bug.
      * src/libvirt.c: Remove unused header.
      * cfg.mk
      (exclude_file_name_regexp--sc_prohibit_empty_lines_at_EOF): Exempt
      gnulib local files.
      1012dc29
    • L
      qemu: eliminate nested switch, simplify code · ecde1591
      Laine Stump 提交于
      qemuBuildHostNetStr had a switch-within-a-switch where both were
      looking at the same variable. This was apparently to take advantage of
      code common to three different cases (while also taking care of some
      code that was different). However, there were only 2 lines common to
      all, one of those can be eliminated by merging it into the
      virAsprintfs that are in each case. On top of that, all the extra
      empty cases cause Coverity complaints (because they are unreachable),
      but absence of the empty cases causes a compile error due to
      "enumeration value not handled in switch".
      
      The solution is to just make each toplevel case independent, folding
      in the common code to each.
      ecde1591
    • L
      Revert "Set default name for SPICE agent channel" · 1133ee2b
      Laine Stump 提交于
      This patch reverts commit b0e2bb33. Its functionality has been replaced
      by commit 3269ee65.
      1133ee2b
    • L
      qemu: set default name for SPICE agent channel when generating command · 3269ee65
      Laine Stump 提交于
      commit b0e2bb33 set a default value for the SPICE agent channel by
      inserting it during parsing of the channel XML. That method of setting
      a default is problematic because it makes a format/parse roundtrip
      unclean, and experience with setting other values as a side effect of
      parsing has led to headaches (e.g. automatically setting a MAC address
      in the parser when one isn't specified in the input XML).
      
      This patch does not revert commit b0e2bb33 (it will be reverted in a
      separate patch) but adds the alternate implementation of simply
      inserting the default value in the appropriate place on the qemu
      commandline when no value is provided.
      3269ee65
    • M
      qemu_agent: Issue guest-sync prior to every command · 075c8518
      Michal Privoznik 提交于
      If we issue guest command and GA is not running, the issuing thread
      will block endlessly. We can check for GA presence by issuing
      guest-sync with unique ID (timestamp). We don't want to issue real
      command as even if GA is not running, once it is started, it process
      all commands written to GA socket.
      075c8518
  8. 30 3月, 2012 7 次提交
  9. 29 3月, 2012 3 次提交
    • Z
      private.syms: Add virNetDevMacVLanRestartWithVPortProfile · a1e50e82
      Zhou Peng 提交于
      virNetDevMacVLanRestartWithVPortProfile is omitted in src/libvirt_private.syms,
      which causes link err.
      a1e50e82
    • C
      qemu: Make migration fail when port profile association fails on the dst host · a02500d0
      Christian Benvenuti 提交于
      In the current V3 migration protocol, Libvirt does not
      check the result of the function
      
        qemuMigrationVPAssociatePortProfiles
      
      This means that it is possible for a migration to complete
      successfully even when the VM loses network connectivity on
      the destination host.
      
      With this change libvirt aborts the migration
      (during the "finish" step) when the above function fails, that
      is to say when at least one of the port profile associations fails.
      
      Signed-off by: Christian Benvenuti <benve@cisco.com>
      a02500d0
    • C
      Set default name for SPICE agent channel · b0e2bb33
      Christophe Fergeau 提交于
      libvirt documentation for channels with type 'spicevmc' says that the
      'target' child node has:
      "an optional attribute name controls how the guest will have access
       to the channel, and defaults to name='com.redhat.spice.0'."
      
      However, this default value is never set in libvirt code base,
      there's only a check in qemu_command.c to error out if the name
      attribute doesn't have the expected value (if it's set).
      
      This commit sets a default target name for spicevmc channels during
      the domain configuration parsing so that the code agrees with the
      documentation.
      b0e2bb33
  10. 27 3月, 2012 2 次提交
    • E
      snapshot: don't pass NULL to QMP command creation · a14eda31
      Eric Blake 提交于
      Commit d42a2ffc caused a regression in creating a disk-only snapshot
      of a qcow2 disk; by passing the wrong variable to the monitor call,
      libvirt ended up creating JSON that looked like "format":null instead
      of the intended "format":"qcow2".
      
      To make it easier to diagnose this in the future, make JSON creation
      error out if "s:arg" is paired with NULL (it is still possible to
      use "n:arg" in the rare cases where qemu will accept a null).
      
      * src/qemu/qemu_driver.c
      (qemuDomainSnapshotCreateSingleDiskActive): Pass correct value.
      * src/qemu/qemu_monitor_json.c (qemuMonitorJSONMakeCommandRaw):
      Improve error message.
      a14eda31
    • D
      Add support for setting init argv for LXC · c91cff25
      Daniel P. Berrange 提交于
      Pass argv to the init binary of LXC, using a new <initarg> element.
      
      * docs/formatdomain.html.in: Document <os> usage for containers
      * docs/schemas/domaincommon.rng: Add <initarg> element
      * src/conf/domain_conf.c, src/conf/domain_conf.h: parsing and
        formatting of <initarg>
      * src/lxc/lxc_container.c: Setup LXC argv
      * tests/Makefile.am, tests/lxcxml2xmldata/lxc-systemd.xml,
        tests/lxcxml2xmltest.c, tests/testutilslxc.c,
        tests/testutilslxc.h: Test parsing/formatting of LXC related
        XML parts
      c91cff25