1. 27 4月, 2012 6 次提交
    • J
      qemu: Avoid bogus error at the end of tunnelled migration · b109b114
      Jiri Denemark 提交于
      Once qemu monitor reports migration has completed, we just closed our
      end of the pipe and let migration tunnel die. This generated bogus error
      in case we did so before the thread saw EOF on the pipe and migration
      was aborted even though it was in fact successful.
      
      With this patch we first wake up the tunnel thread and once it has read
      all data from the pipe and finished the stream we close the
      filedescriptor.
      
      A small additional bonus of this patch is that real errors reported
      inside qemuMigrationIOFunc are not overwritten by virStreamAbort any
      more.
      b109b114
    • J
      qemu: Fix detection of failed migration · e173e81e
      Jiri Denemark 提交于
      When QEMU reported failed or canceled migration, we correctly detected
      it but didn't really consider it as an error condition and migration
      protocol just went on. Luckily, some of the subsequent steps eventually
      failed end we reported an (unrelated and mostly random) error back to
      the caller.
      e173e81e
    • J
      rpc: Discard non-blocking calls only when necessary · 0129b9ac
      Jiri Denemark 提交于
      Currently, non-blocking calls are either sent immediately or discarded
      in case sending would block. This was implemented based on the
      assumption that the non-blocking keepalive call is not needed as there
      are other calls in the queue which would keep the connection alive.
      However, if those calls are no-reply calls (such as those carrying
      stream data), the remote party knows the connection is alive but since
      we don't get any reply from it, we think the connection is dead.
      
      This is most visible in tunnelled migration. If it happens to be longer
      than keepalive timeout (30s by default), it may be unexpectedly aborted
      because the connection is considered to be dead.
      
      With this patch, we only discard non-blocking calls when the last call
      with a thread is completed and thus there is no thread left to keep
      sending the remaining non-blocking calls.
      0129b9ac
    • J
      qemu: Preserve original error during migration · d63f0754
      Jiri Denemark 提交于
      In some cases (spotted with broken connection during tunneled migration)
      we were overwriting the original error with worse or even misleading
      errors generated when we were cleaning up after failed migration.
      d63f0754
    • L
      util: fix crash when starting macvtap interfaces · 5531a13c
      Laine Stump 提交于
      This patch resolves https://bugzilla.redhat.com/show_bug.cgi?id=815270
      
      The function virNetDevMacVLanVPortProfileRegisterCallback() takes an
      arg "virtPortProfile", and was checking it for non-NULL before using
      it. However, the prototype for
      virNetDevMacVLanPortProfileRegisterCallback had marked that arg with
      ATTRIBUTE_NONNULL(). Contrary to what one may think,
      ATTRIBUTE_NONNULL() does not provide any guarantee that an arg marked
      as such really is always non-null; the only effect to the code
      generated by gcc, is that gcc *assumes* it is non-NULL; this results
      in, for example, the check for a non-NULL value being optimized out.
      
      (Unfortunately, this code removal only occurs when optimization is
      enabled, and I am in the habit of doing local builds with optimization
      off to ease debugging, so the bug didn't show up in my earlier local
      testing).
      
      In general, virPortProfile might always be NULL, so it shouldn't be
      marked as ATTRIBUTE_NONNULL. One other function prototype made this
      same error, so this patch fixes it as well.
      5531a13c
    • E
      build: fix bootstrap on RHEL · 6e2847b2
      Eric Blake 提交于
      Commit 8fe455fd tried to work around
      a regression introduced in upstream gnulib that requires gettext 0.18
      or newer on all projects using bootstrap, by making libvirt require
      gettext 0.18.  But this fails on RHEL 6.2, which still ships gettext
      0.17.  Revert that change, and instead, import the latest round of
      gnulib updates that fix that problem properly.
      
      If you have already built in the window where libvirt required 0.18,
      be aware that incremental updates may run into problems: this is
      because 'autopoint --force' will not downgrade m4/po.m4 back to an
      older version, but it must be downgraded back to 0.17 levels to work
      with this patch.  You may either manually remove that file then rerun
      bootstrap, or it may prove easier to just clean up all non-git files
      to start from a clean slate.
      
      * bootstrap.conf: Revert minimum gettext back to 0.17.
      * configure.ac: Likewise.
      * .gnulib: Update to latest, for bootstrap fixes.
      * bootstrap: Resync from gnulib.
      6e2847b2
  2. 26 4月, 2012 21 次提交
    • H
      fix memleak in linuxParseCPUmap · acae5f86
      Hu Tao 提交于
      acae5f86
    • P
      build: Fix version of gettext macros · c954ad8a
      Peter Krempa 提交于
      Commit c9cd419c added copying of the
      makefile for translation files from gnulib. The makefile from gnulib is
      of version 0.18 but the build configuration cretes macros from version
      0.17 which breaks the build with message:
      
      *** error: gettext infrastructure mismatch: using a Makefile.in.in from
      gettext version 0.18 but the autoconf macros are from gettext version
      0.17
      c954ad8a
    • M
      vbox: Fix passing an empty IMedium* array to IMachine::Delete · 3cf61dd5
      Matthias Bolte 提交于
      vboxArray is not castable to a COM item type. vboxArray is a
      wrapper around the XPCOM and MSCOM specific array handling.
      
      In this case we can avoid passing NULL as an empty array to
      IMachine::Delete by passing a dummy IMedium* array with a single
      NULL item.
      3cf61dd5
    • W
      building: remove libvirt_dbus.syms from EXTRA_DIST · 372a14c6
      Wen Congyang 提交于
      commit 2223ea98 removes src/libvirt_dbus.syms, but it forgets
      to remove it from EXTRA_DIST. It will cause 'make dist' failed.
      372a14c6
    • M
      win32: Properly handle TlsGetValue returning NULL · 1d655dd1
      Matthias Bolte 提交于
      virThreadSelf tries to access the virThreadPtr stored in TLS for the
      current thread via TlsGetValue. When virThreadSelf is called on a thread
      that was not created via virThreadCreate (e.g. the main thread) then
      TlsGetValue returns NULL as TlsAlloc initializes TLS slots to NULL.
      
      virThreadSelf can be called on the main thread via this call chain from
      virsh
      
      vshDeinit
      virEventAddTimeout
      virEventPollAddTimeout
      virEventPollInterruptLocked
      virThreadIsSelf
      
      triggering a segfault as virThreadSelf unconditionally dereferences the
      return value of TlsGetValue.
      
      Fix this by making virThreadSelf check the TLS slot value for NULL and
      setting the given virThreadPtr accordingly.
      
      Reported by Marcel Müller.
      1d655dd1
    • R
      esx: Fix segfault in esxConnectToHost · 622c0c7f
      Ryan Woodsmall 提交于
      Caused by commit 4445e16b that
      made the code used the connection private data pointer before
      it was initialized.
      622c0c7f
    • G
      openvz: wire up getHostname · 881dd9dc
      Guido Günther 提交于
      881dd9dc
    • E
      virnetserver: handle sigaction correctly · ac620c2e
      Eric Blake 提交于
      POSIX says that sa_sigaction is only safe to use if sa_flags
      includes SA_SIGINFO; conversely, sa_handler is only safe to
      use when flags excludes that bit.  Gnulib doesn't guarantee
      an implementation of SA_SIGINFO, but does guarantee that
      if SA_SIGINFO is undefined, we can safely define it to 0 as
      long as we don't dereference the 2nd or 3rd argument of
      any handler otherwise registered via sa_sigaction.
      
      Based on a report by Wen Congyang.
      
      * src/rpc/virnetserver.c (SA_SIGINFO): Stub for mingw.
      (virNetServerSignalHandler): Avoid bogus dereference.
      (virNetServerFatalSignal, virNetServerNew): Set flags properly.
      (virNetServerAddSignalHandler): Drop unneeded #ifdef.
      ac620c2e
    • E
      conf: tighten up XML integer parsing · 8a55d381
      Eric Blake 提交于
      https://bugzilla.redhat.com/show_bug.cgi?id=617711 reported that
      even with my recent patched to allow <memory unit='G'>1</memory>,
      people can still get away with trying <memory>1G</memory> and
      silently get <memory unit='KiB'>1</memory> instead.  While
      virt-xml-validate catches the error, our C parser did not.
      
      Not to mention that it's always fun to fix bugs while reducing
      lines of code.  :)
      
      * src/conf/domain_conf.c (virDomainParseMemory): Check for parse error.
      (virDomainDefParseXML): Avoid strtoll.
      * src/conf/storage_conf.c (virStorageDefParsePerms): Likewise.
      * src/util/xml.c (virXPathLongBase, virXPathULongBase)
      (virXPathULongLong, virXPathLongLong): Likewise.
      8a55d381
    • E
      build: avoid type-punning in vbox · 834bb448
      Eric Blake 提交于
      Commit 78345c68 makes at least gcc 4.1.2 on RHEL 5 complain:
      
      cc1: warnings being treated as errors
      In file included from vbox/vbox_V4_0.c:13:
      vbox/vbox_tmpl.c: In function 'vboxDomainUndefineFlags':
      vbox/vbox_tmpl.c:5298: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
      
      * src/vbox/vbox_tmpl.c (vboxDomainUndefineFlags): Use union to
      avoid compiler warning.
      834bb448
    • E
      build: fix fresh checkout on RHEL5 · e3f725a1
      Eric Blake 提交于
      Building a fresh checkout on RHEL 5 has been broken since commit
      29db7a00, due to a gnulib regression in the bootstrap script
      (incremental builds from a checkout earlier than that point were
      okay, though).
      
      * .gnulib: Update to latest, for bootstrap fixes.
      * bootstrap: Resync from gnulib.
      * gnulib/local/top/maint.mk.diff: Drop patch that was added
      upstream in the meantime.
      e3f725a1
    • D
      util: only register callbacks for CREATE operations in virnetdevmacvlan.c · dde004a7
      D. Herrendoerfer 提交于
      Currently upon a migration a callback is created when a 802.1qbg link
      is set to PREASSOCIATE, this should not happen because this is a no-op
      on most switches, and does not lead to an ASSOCIATE state.  This patch
      only creates callbacks when CREATE or RESTORE is requested.  Migration
      and libvirtd restart scenarios are already handled elsewhere.
      Signed-off-by: ND. Herrendoerfer <d.herrendoerfer@herrendoerfer.name>
      dde004a7
    • S
      Fix a memory leak · b38be9da
      Stefan Berger 提交于
      The below patch fixes the following memory leak.
      
      ==20624== 24 bytes in 2 blocks are definitely lost in loss record 532 of 1,867
      ==20624==    at 0x4A05E46: malloc (vg_replace_malloc.c:195)
      ==20624==    by 0x38EC27FC01: strdup (strdup.c:43)
      ==20624==    by 0x4EB6BA3: virDomainChrSourceDefCopy (domain_conf.c:1122)
      ==20624==    by 0x495D76: qemuProcessFindCharDevicePTYs (qemu_process.c:1497)
      ==20624==    by 0x498321: qemuProcessWaitForMonitor (qemu_process.c:1258)
      ==20624==    by 0x49B5F9: qemuProcessStart (qemu_process.c:3652)
      ==20624==    by 0x468B5C: qemuDomainObjStart (qemu_driver.c:4753)
      ==20624==    by 0x469171: qemuDomainStartWithFlags (qemu_driver.c:4810)
      ==20624==    by 0x4F21735: virDomainCreate (libvirt.c:8153)
      ==20624==    by 0x4302BF: remoteDispatchDomainCreateHelper (remote_dispatch.h:852)
      ==20624==    by 0x4F72C14: virNetServerProgramDispatch (virnetserverprogram.c:416)
      ==20624==    by 0x4F6D690: virNetServerHandleJob (virnetserver.c:164)
      ==20624==    by 0x4E8F43D: virThreadPoolWorker (threadpool.c:144)
      ==20624==    by 0x4E8EAB5: virThreadHelper (threads-pthread.c:161)
      ==20624==    by 0x38EC606CCA: start_thread (pthread_create.c:301)
      ==20624==    by 0x38EC2E0C2C: clone (clone.S:115)
      b38be9da
    • J
      vbox: avoid provoking assertions in VBoxSVC · 3dab791f
      Jean-Baptiste Rouault 提交于
      Passing a NULL pointer to IMachine::delete virtualbox API
      causes VBoxSVC to raise an assertion. This patch passes
      an empty array instead.
      3dab791f
    • O
      conf: Do not parse cpuset only if the placement is auto · d2aec113
      Osier Yang 提交于
      So that a domain xml which doesn't have "placement" specified, but
      "cpuset" is specified, could be parsed. And in this case, the
      "placement" mode will be set as "static".
      d2aec113
    • J
      Do not enforce source type of console[0] · 9963f590
      Jan Kiszka 提交于
      If console[0] is an alias for serial[0], do not enforce the former to
      have a PTY source type. This breaks serial consoles on stdio and makes
      no sense.
      Signed-off-by: NJan Kiszka <jan.kiszka@siemens.com>
      9963f590
    • S
      xen: do not use ioemu type for any emulated NIC · e3cac12c
      Stefan Bader 提交于
      When using the xm/xend stack to manage instances there is a bug
      that causes the emulated interfaces to be unusable when the vif
      config contains type=ioemu.
      
      The current code already has a special quirk to not use this
      keyword if no specific model is given for the emulated NIC
      (defaulting to rtl8139).
      Essentially it works because regardless of the type argument,i
      the Xen stack always creates emulated and paravirt interfaces and
      lets the guest decide which one to use. So neither xl nor xm stack
      actually require the type keyword for emulated NICs.
      Signed-off-by: NStefan Bader <stefan.bader@canonical.com>
      e3cac12c
    • C
      docs: fix 'omitted' typo in <cputune> doc · 0efe7ecc
      Christophe Fergeau 提交于
      'omitted' was mispelt 'commited' twice. One of the sentences with
      the typo was also missing an 'is' ('each VCPU *is* pinned to all...')
      which I added in this commit while I was at it.
      0efe7ecc
    • C
      f2be8879
    • G
    • C
      storage: lvm: use correct lv* command parameters · 61544d31
      Cole Robinson 提交于
      lvcreate want's the parent pool's name, not the pool path
      lvchange and lvremove want lv specified as $vgname/$lvname
      
      This largely worked before because these commands strip off a
      starting /dev. But https://bugzilla.redhat.com/show_bug.cgi?id=714986
      is from a user using a 'nested VG' that was having problems.
      
      I couldn't find any info on nested LVM and the reporter never responded,
      but I reproduced with XML that specified a valid source name, and
      set target path to a symlink.
      61544d31
  3. 16 4月, 2012 13 次提交
    • O
      numad: Ignore cpuset if placement is auto · 455d2224
      Osier Yang 提交于
      As explained in previous patch, numad will balance the affinity
      dynamically, so reflecting the cpuset from numad at the first
      time doesn't make much case, and may just could cause confusion.
      (cherry picked from commit 8fb2164c)
      455d2224
    • O
      numad: Convert node list to cpumap before setting affinity · 3f764157
      Osier Yang 提交于
      Instead of returning a CPUs list, numad returns NUMA node
      list instead, this patch is to convert the node list to
      cpumap before affinity setting. Otherwise, the domain
      processes will be pinned only to CPU[$numa_cell_num],
      which will cause significiant performance losses.
      
      Also because numad will balance the affinity dynamically,
      reflecting the cpuset from numad back doesn't make much
      sense then, and it may just could produce confusion for
      the users. Thus the better way is not to reflect it back
      to XML. And in this case, it's better to ignore the cpuset
      when parsing XML.
      
      The codes to update the cpuset is removed in this patch
      incidentally, and there will be a follow up patch to ignore
      the manually specified "cpuset" if "placement" is "auto",
      and document will be updated too.
      (cherry picked from commit ccf80e36)
      3f764157
    • G
      Fix macvtap detection by also checking for IFLA_VF_MAX · 4ceabdf5
      Guido Günther 提交于
      since this isn't available on older kernels such as Debian Squeeze's
      2.6.32. This make --with-macvtap=check work as expected.
      (cherry picked from commit a2996926)
      4ceabdf5
    • P
      virnetdev: Check for defined IFLA_VF_* · 4ecd1d69
      Philipp Hahn 提交于
      The linux-2.6.32 kernel header does not yet define IFLA_VF_MAX and others,
      which breaks compiling a new libvirt on old systems like Debian Squeeze.
      
      (I also have to add --without-macvtap --disable-werror --without-virtualport to
       ./configure to get it to compile.)
      Signed-off-by: NPhilipp Hahn <hahn@univention.de>
      (cherry picked from commit d7451bdd)
      4ecd1d69
    • M
      conf: Avoid double assignment in virDomainDiskRemove · cea0c393
      Michal Privoznik 提交于
      Although it should be harmless to do:
          disk = disk = def->disks[i]
      some not-so-wise compilers may fool around.
      Besides, such assignment is useless here.
      (cherry picked from commit e14d6571)
      cea0c393
    • M
      qemu: Fix mem leak in qemuProcessInitCpuAffinity · 7175699c
      Michal Privoznik 提交于
      If placement mode is AUTO, on some return paths char *cpumap or
      char *nodeset are leaked.
      (cherry picked from commit 354e6d4e)
      7175699c
    • S
      xend_internal: Use domain/status for shutdown check · 413d8670
      Stefan Bader 提交于
      On newer xend (v3.x and after) there is no state and domid reported
      for inactive domains. When initially creating connections this is
      handled in various places by assigning domain->id = -1.
      But once an instance has been running, the id is set to the current
      domain id. And it does not change when the instance is shut down.
      So when querying the domain info, the hypervisor driver, which gets
      asked first will indicate it cannot find information, then the
      xend driver is asked and will set the status to NOSTATE because it
      checks for the -1 domain id.
      Checking domain/status for 0 seems to be more reliable for that.
      
      One note: I am not sure whether the domain->id also should get set
      back to -1 whenever any sub-driver thinks the instance is no longer
      running.
      
      BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=746007
      BugLink: http://bugs.launchpad.net/bugs/929626Signed-off-by: NStefan Bader <stefan.bader@canonical.com>
      (cherry picked from commit 26e9ef47)
      413d8670
    • D
      qemu,util: fix netlink callback registration for migration · 965e7f14
      D. Herrendoerfer 提交于
      This patch adds a netlink callback when migrating a VEPA enabled
      virtual machine.  It fixes a Bug where a VM would not request a port
      association when it was cleared by lldpad.
      
      This patch requires the latest git version of lldpad to work.
      Signed-off-by: ND. Herrendoerfer <d.herrendoerfer@herrendoerfer.name>
      (cherry picked from commit 997366ca)
      965e7f14
    • M
      qemuOpenFile: Don't force chown on NFS · 27ef74ff
      Michal Privoznik 提交于
      If dynamic_ownership is off and we are creating a file on NFS
      we force chown. This will fail as chown/chmod are not supported
      on NFS. However, with no dynamic_ownership we are not required
      to do any chown.
      (cherry picked from commit b1256816)
      27ef74ff
    • A
      daemon: Plug memory leaks · 9b72feec
      Alex Jia 提交于
      * daemon/libvirtd-config.c (daemonConfigFree): fix memory leaks.
      
      How to reproduce?
      
      % make && make -C tests check TESTS=libvirtdconftest
      % cd tests && valgrind -v --leak-check=full ./libvirtdconftest
      
      actual result:
      
      ==11008== 185 bytes in 5 blocks are definitely lost in loss record 3 of 5
      ==11008==    at 0x4A05FDE: malloc (vg_replace_malloc.c:236)
      ==11008==    by 0x39CF07F6E1: strdup (strdup.c:43)
      ==11008==    by 0x406626: daemonConfigLoadOptions (libvirtd-config.c:438)
      ==11008==    by 0x406800: daemonConfigLoadData (libvirtd-config.c:492)
      ==11008==    by 0x403CCF: testCorrupt (libvirtdconftest.c:110)
      ==11008==    by 0x404FAD: virtTestRun (testutils.c:145)
      ==11008==    by 0x403A34: mymain (libvirtdconftest.c:219)
      ==11008==    by 0x404687: virtTestMain (testutils.c:700)
      ==11008==    by 0x39CF01ECDC: (below main) (libc-start.c:226)
      ==11008==
      ==11008== LEAK SUMMARY:
      ==11008==    definitely lost: 185 bytes in 5 blocks
      Signed-off-by: NAlex Jia <ajia@redhat.com>
      (cherry picked from commit d0eaf4b1)
      
      Conflicts:
      
      	daemon/libvirtd-config.c
      9b72feec
    • P
      qemu: Fix deadlock when qemuDomainOpenConsole cleans up a connection · 8dce8b82
      Peter Krempa 提交于
      The new safe console handling introduced a possibility to deadlock the
      qemu driver when a new console connection forcibly disconnects a
      previous console stream that belongs to an already closed connection.
      
      The virStreamFree function calls subsequently a the virReleaseConnect
      function that tries to lock the driver while discarding the connection,
      but the driver was already locked in qemuDomainOpenConsole.
      
      Backtrace of the deadlocked thread:
      0  0x00007f66e5aa7f14 in __lll_lock_wait () from /lib64/libpthread.so.0
      1  0x00007f66e5aa3411 in _L_lock_500 () from /lib64/libpthread.so.0
      2  0x00007f66e5aa322a in pthread_mutex_lock () from/lib64/libpthread.so.0
      3  0x0000000000462bbd in qemudClose ()
      4  0x00007f66e6e178eb in virReleaseConnect () from/usr/lib64/libvirt.so.0
      5  0x00007f66e6e19c8c in virUnrefStream () from /usr/lib64/libvirt.so.0
      6  0x00007f66e6e3d1de in virStreamFree () from /usr/lib64/libvirt.so.0
      7  0x00007f66e6e09a5d in virConsoleHashEntryFree () from/usr/lib64/libvirt.so.0
      8  0x00007f66e6db7282 in virHashRemoveEntry () from/usr/lib64/libvirt.so.0
      9  0x00007f66e6e09c4e in virConsoleOpen () from /usr/lib64/libvirt.so.0
      10 0x00000000004526e9 in qemuDomainOpenConsole ()
      11 0x00007f66e6e421f1 in virDomainOpenConsole () from/usr/lib64/libvirt.so.0
      12 0x00000000004361e4 in remoteDispatchDomainOpenConsoleHelper ()
      13 0x00007f66e6e80375 in virNetServerProgramDispatch () from/usr/lib64/libvirt.so.0
      14 0x00007f66e6e7ae11 in virNetServerHandleJob () from/usr/lib64/libvirt.so.0
      15 0x00007f66e6da897d in virThreadPoolWorker () from/usr/lib64/libvirt.so.0
      16 0x00007f66e6da7ff6 in virThreadHelper () from/usr/lib64/libvirt.so.0
      17 0x00007f66e5aa0c5c in start_thread () from /lib64/libpthread.so.0
      18 0x00007f66e57e7fcd in clone () from /lib64/libc.so.6
      
      * src/qemu/qemu_driver.c: qemuDomainOpenConsole()
              -- unlock the qemu driver right after acquiring the domain
              object
      (cherry picked from commit 3d3de46a)
      8dce8b82
    • E
      build: avoid s390 compiler warnings · 3f62b113
      Eric Blake 提交于
      I noticed these compiler warnings when building for the s390 architecture.
      
      * src/node_device/node_device_udev.c (udevDeviceMonitorStartup):
      Mark unused variable.
      * src/nodeinfo.c (linuxNodeInfoCPUPopulate): Avoid unused variable.
      (cherry picked from commit 9011a494)
      3f62b113
    • P
      virsh: Clarify use of the --managed-save flag for the list command · 28f8deb2
      Peter Krempa 提交于
      The documentation for the flag doesn't clearly state that the flag only
      enhances the output and the user needs to specify other flags to list
      inactive domains, that are enhanced by this flag.
      (cherry picked from commit cc510065)
      28f8deb2