1. 25 6月, 2012 5 次提交
  2. 23 6月, 2012 1 次提交
    • H
      fix a bug of ref count in virnetserver.c · 9c77bf04
      Hu Tao 提交于
      The test of ref count is not protected by lock, which is unsafe because
      the ref count may have been changed by other threads during the test.
      
      This patch fixes this.
      9c77bf04
  3. 22 6月, 2012 2 次提交
    • P
      virsh: Improve error when trying to change vm's cpu count 0 · de924ca9
      Peter Krempa 提交于
      This patch adds a check for the count of processors the user requests
      for the guest machine so that invalid values produce a more helpful
      error message.
      de924ca9
    • J
      Fix deadlock on libvirtd shutdown · 0dda594d
      Jim Fehlig 提交于
      When shutting down libvirtd, the virNetServer shutdown can deadlock
      if there are in-flight jobs being handled by virNetServerHandleJob().
      virNetServerFree() will acquire the virNetServer lock and call
      virThreadPoolFree() to terminate the workers, waiting for the workers
      to finish.  But in-flight workers will attempt to acquire the
      virNetServer lock, resulting in deadlock.
      
      Fix the deadlock by unlocking the virNetServer lock before calling
      virThreadPoolFree().  This is safe since the virNetServerPtr object
      is ref-counted and only decrementing the ref count needs to be
      protected.  Additionally, there is no need to re-acquire the lock
      after virThreadPoolFree() completes as all the workers have
      terminated.
      0dda594d
  4. 21 6月, 2012 8 次提交
    • G
      qemu: Add xhci support · fd4fd420
      Gerd Hoffmann 提交于
      qemu 1.1 features a xhci controller,
      this patch adds support for it.
      Signed-off-by: NGerd Hoffmann <kraxel@redhat.com>
      fd4fd420
    • P
      virsh: add support for virConnectListAllDomains and clean up cmdList · d62e51f8
      Peter Krempa 提交于
      This patch makes use of the newly added api virConnectListAllDomains()
      to list domains in virsh.
      
      Virsh now represents lists of domains using an internal structure
      vshDomainList. This structure contains the virDomainPtr list as provided
      by virConnectListAllDomains() and the count of domains in the list.
      
      For backwards compatibility, the function vshDomainListCollect was added
      that tries to enumerate the domains using the new API and if the API is
      not supported falls back to the older approach with the two list
      functions.  The helper function also simulates filtering by all
      currently supported flags added with virConnectListAllDomains().
      
      This patch also cleans up the "list" command handler to use the new
      helpers and adds new command line flags to make use of filtering.
      d62e51f8
    • P
      f1b872b2
    • O
      util: Fix the indention · fafb80a1
      Osier Yang 提交于
      src/util/util.c: virFileOpenAs.
      fafb80a1
    • J
      Initialize random generator in lxc controller · 57349ffc
      Jim Fehlig 提交于
      The lxc contoller eventually makes use of virRandomBits(), which was
      segfaulting since virRandomInitialize() is never invoked.
      
      Program received signal SIGSEGV, Segmentation fault.
      0x00007ffff554d560 in random_r () from /lib64/libc.so.6
      (gdb) bt
      0  0x00007ffff554d560 in random_r () from /lib64/libc.so.6
      1  0x0000000000469eaa in virRandomBits (nbits=32) at util/virrandom.c:80
      2  0x000000000045bf69 in virHashCreateFull (size=256,
          dataFree=0x4aa2a2 <hashDataFree>, keyCode=0x45bd40 <virHashStrCode>,
          keyEqual=0x45bdad <virHashStrEqual>, keyCopy=0x45bdfa <virHashStrCopy>,
          keyFree=0x45be37 <virHashStrFree>) at util/virhash.c:134
      3  0x000000000045c069 in virHashCreate (size=0, dataFree=0x4aa2a2 <hashDataFree>)
          at util/virhash.c:164
      4  0x00000000004aa562 in virNWFilterHashTableCreate (n=0)
          at conf/nwfilter_params.c:686
      5  0x00000000004aa95b in virNWFilterParseParamAttributes (cur=0x711d30)
          at conf/nwfilter_params.c:793
      6  0x0000000000481a7f in virDomainNetDefParseXML (caps=0x702c90, node=0x7116b0,
          ctxt=0x7101b0, bootMap=0x0, flags=0) at conf/domain_conf.c:4589
      7  0x000000000048cc36 in virDomainDefParseXML (caps=0x702c90, xml=0x710040,
          root=0x7103b0, ctxt=0x7101b0, expectedVirtTypes=16, flags=0)
          at conf/domain_conf.c:8658
      8  0x000000000048f011 in virDomainDefParseNode (caps=0x702c90, xml=0x710040,
          root=0x7103b0, expectedVirtTypes=16, flags=0) at conf/domain_conf.c:9360
      9  0x000000000048ee30 in virDomainDefParse (xmlStr=0x0,
          filename=0x702ae0 "/var/run/libvirt/lxc/x.xml", caps=0x702c90,
          expectedVirtTypes=16, flags=0) at conf/domain_conf.c:9310
      10 0x000000000048ef00 in virDomainDefParseFile (caps=0x702c90,
          filename=0x702ae0 "/var/run/libvirt/lxc/x.xml", expectedVirtTypes=16, flags=0)
          at conf/domain_conf.c:9332
      11 0x0000000000425053 in main (argc=5, argv=0x7fffffffe2b8)
          at lxc/lxc_controller.c:1773
      57349ffc
    • O
      storage: Set the perms if the pool target already exists for fs pools · e4cfe5f6
      Osier Yang 提交于
      The comment says:
      
      /* Now create the final dir in the path with the uid/gid/mode
       * requested in the config. If the dir already exists, just set
       * the perms.
       */
      
      However, virDirCreate is only invoked if the target path doesn't
      exist yet (which is opposite with the comment), or the uid from
      the config is not -1 (I don't understand why, think it's just
      another mistake). And the result is the perms of the pool won't
      be changed if one tries to build the pool with different perms
      again.
      
      Besides these logic error fix, if no uid and gid are specified in
      the config, the practical used uid, gid are reflected.
      e4cfe5f6
    • E
      snapshot: implement new APIs for esx and vbox · d4edc089
      Eric Blake 提交于
      The two new APIs are rather trivial; based on bits and pieces of
      other existing APIs.  But rather than blindly return 0 or 1 for
      HasMetadata, I chose to first validate that the snapshot in
      question in fact exists.
      
      * src/esx/esx_driver.c (esxDomainSnapshotIsCurrent)
      (esxDomainSnapshotHasMetadata): New functions.
      * src/vbox/vbox_tmpl.c (vboxDomainSnapshotIsCurrent)
      (vboxDomainSnapshotHasMetadata): Likewise.
      d4edc089
    • E
      snapshot: require existence before returning success · e3fe4102
      Eric Blake 提交于
      Blindly returning success is misleading if the object no longer
      exists; it is a bit better to check for existence up front before
      returning information about that object.  This pattern matches the
      fact that most of our other APIs check for existence as a side
      effect prior to getting at the real piece of information being
      queried.
      
      * src/esx/esx_driver.c (esxDomainIsUpdated, esxDomainIsPersistent):
      Add existence checks.
      * src/vbox/vbox_tmpl.c (vboxDomainIsPersistent)
      (vboxDomainIsUpdated): Likewise.
      e3fe4102
  5. 20 6月, 2012 13 次提交
    • P
      drivers: Implement virListAllDomains for drivers using virDomainObj · 33dc8cf0
      Peter Krempa 提交于
      This patch adds support for listing all domains into drivers that use
      the common virDomainObj implementation: libxl, lxc, openvz, qemu, test,
      uml, vmware.
      
      For drivers that don't support managed save images the guests are
      treated as if they had none, so filtering guests that do have such an
      image on this driver succeeds and produces 0 results.
      33dc8cf0
    • G
      openvz: check pointer size instead of int · 229773fc
      Guido Günther 提交于
      since int is 4 bytes on both i386 and amd64.
      229773fc
    • D
      Fix default USB controller for ppc64 · d1778b71
      Dipankar Sarma 提交于
      Fix the default usb controller for pseries systems if none
      specified.
      Signed-off-by: NDipankar Sarma <dipankar@in.ibm.com>
      d1778b71
    • E
      list: add qemu snapshot list support · 5488612e
      Eric Blake 提交于
      The two new functions are very similar to the existing functions;
      just a matter of different arguments and a call to a different
      helper function.
      
      * src/qemu/qemu_driver.c (qemuDomainSnapshotListNames)
      (qemuDomainSnapshotNum, qemuDomainSnapshotListChildrenNames)
      (qemuDomainSnapshotNumChildren): Support new flags.
      (qemuDomainListAllSnapshots): New functions.
      5488612e
    • E
      list: new helper function to collect snapshots · 8548a9c5
      Eric Blake 提交于
      Wraps the conversion from 'char *name' to virDomainSnapshotPtr in
      a reusable manner.
      
      * src/conf/virdomainlist.h (virDomainListSnapshots): New declaration.
      * src/conf/virdomainlist.c (virDomainListSnapshots): Implement it.
      * src/libvirt_private.syms (virdomainlist.h): Export it.
      8548a9c5
    • E
      list: provide RPC call for snapshots · dbb564f8
      Eric Blake 提交于
      The generator doesn't handle lists of virDomainSnapshotPtr, so
      this commit requires a bit more work than some RPC additions.
      
      * src/remote/remote_protocol.x
      (REMOTE_PROC_DOMAIN_LIST_ALL_SNAPSHOTS)
      (REMOTE_PROC_DOMAIN_SNAPSHOT_LIST_ALL_CHILDREN): New RPC calls,
      with corresponding structs.
      * daemon/remote.c (remoteDispatchDomainListAllSnapshots)
      (remoteDispatchDomainSnapshotListAllChildren): New functions.
      * src/remote/remote_driver.c (remoteDomainListAllSnapshots)
      (remoteDomainSnapshotListAllChildren): Likewise.
      * src/remote_protocol-structs: Regenerate.
      dbb564f8
    • E
      list: provide python bindings for snapshots · f73d99c2
      Eric Blake 提交于
      This adds support for the new virDomainListAllSnapshots (a domain
      function) and virDomainSnapshotListAllChildren (a snapshot function)
      to the libvirt-python bindings.  The implementation is done manually
      as the generator does not support wrapping lists of C pointers into
      python objects.
      
      * python/libvirt-override.c (libvirt_virDomainListAllSnapshots)
      (libvirt_virDomainSnapshotListAllChildren): New functions.
      * python/libvirt-override-api.xml: Document them.
      * python/libvirt-override-virDomain.py (listAllSnapshots): New
      file.
      * python/libvirt-override-virDomainSnapshot.py (listAllChildren):
      Likewise.
      * python/Makefile.am (CLASSES_EXTRA): Ship them.
      f73d99c2
    • E
      list: use the new snapshot API in virsh when possible · a7f7bf02
      Eric Blake 提交于
      Using the new API is so much shorter than the rest of the remainder
      of the function.
      
      * tools/virsh.c (vshSnapshotList): Use the new API.
      a7f7bf02
    • E
      list: add virDomainListAllSnapshots API · 37bb0447
      Eric Blake 提交于
      There was an inherent race between virDomainSnapshotNum() and
      virDomainSnapshotListNames(), where an additional snapshot could
      be created in the meantime, or where a snapshot could be deleted
      before converting the name back to a virDomainSnapshotPtr.  It
      was also an awkward name: the function operates on domains, not
      domain snapshots.  virDomainSnapshotListChildrenNames() suffered
      from the same inherent race, although its naming was nicer.
      
      This patch makes things nicer by grabbing a snapshot list
      atomically, in the format most useful to the user.
      
      * include/libvirt/libvirt.h.in (virDomainListAllSnapshots)
      (virDomainSnapshotListAllChildren): New declarations.
      * src/libvirt.c (virDomainSnapshotListNames)
      (virDomainSnapshotListChildrenNames): Add cross-references.
      (virDomainListAllSnapshots, virDomainSnapshotListAllChildren):
      New functions.
      * src/libvirt_public.syms (LIBVIRT_0.9.13): Export them.
      * src/driver.h (virDrvDomainListAllSnapshots)
      (virDrvDomainSnapshotListAllChildren): New callbacks.
      * python/generator.py (skip_function): Prepare for later
      hand-written versions.
      37bb0447
    • E
      snapshot: expose new flags in virsh · 35ae18f3
      Eric Blake 提交于
      Previously, to get the name of all snapshots with children, it was
      necessary to get the name of all snapshots and then remove the
      name of leaf snapshots.  This is racy, and somewhat inefficient
      compared to planned API additions.  We can emulate --no-metadata on
      0.9.5-0.9.12, but for now, there is no emulation of --no-leaves.
      
      * tools/virsh.c (cmdSnapshotList): Add new options --no-leaves and
      --no-metadata.
      (vshSnapshotList): Emulate where possible.
      * tools/virsh.pod (snapshot-list): Document them.
      35ae18f3
    • E
      snapshot: add additional filters when getting lists · 5873f2e2
      Eric Blake 提交于
      It turns out that one-bit filtering makes it hard to select the inverse
      set, so it is easier to provide filtering groups.  For back-compat,
      omitting all bits within a group means the group is not used for
      filtering, and by definition of a group (each snapshot matches exactly
      one bit within the group, and the set of bits in the group covers all
      snapshots), selecting all bits also makes the group useless.
      
      Unfortunately, virDomainSnapshotListChildren defined the bit
      VIR_DOMAIN_SNAPSHOT_LIST_DESCENDANTS as an expansion rather than a
      filter, so we cannot make it part of a filter group, so that bit
      (and its counterpart VIR_DOMAIN_SNAPSHOT_LIST_ROOTS for
      virDomainSnapshotList) remains a single control bit.
      
      * include/libvirt/libvirt.h.in (virDomainSnapshotListFlags): Add a
      couple more flags.
      * src/libvirt.c (virDomainSnapshotNum)
      (virDomainSnapshotNumChildren): Document them.
      (virDomainSnapshotListNames, virDomainSnapshotListChildrenNames):
      Likewise, and add thread-safety caveats.
      * src/conf/virdomainlist.h (VIR_DOMAIN_SNAPSHOT_FILTERS_*): New
      convenience macros.
      * src/conf/domain_conf.c (virDomainSnapshotObjListCopyNames)
      (virDomainSnapshotObjListCount): Support the new flags.
      5873f2e2
    • M
      virsh: fix few typos on desc command · 3dc733bb
      Martin Kletzander 提交于
      virsh help fix:
       - <--title> can also /get/ the title
      
      virsh man page:
       - missing <domain-id>
       - <new_desc> should be <new-desc>
      3dc733bb
    • M
      domain_conf: fix possible memory leak · 830d035f
      Martin Kletzander 提交于
      Until now, it was possible to crash libvirtd when defining domain with
      channel device with missing source element.
      
      When creating new virDomainChrDef, target.port is set to -1, but
      unfortunately it is an union with addresses that virDomainChrDefFree
      tries to free in case the deviceType is channel. Having the port set
      to -1 is intended, however the cleanest way to get around the problems
      with the crash seems to be renumbering the VIR_DOMAIN_CHR_CHANNEL_
      target types to cover new NONE type (with value 0) being the default
      (no target type yet).
      830d035f
  6. 19 6月, 2012 11 次提交
    • P
      error: Fix typos in argument checking macros · fbc72a1d
      Peter Krempa 提交于
      Macro virCheckNullArgGoto is supposed to check for NULL argument but
      checks non-NULL instead.
      
      Macro virCheckNonNullArgReturn reports error as if the argument should
      be NULL when it shouldn't.
      fbc72a1d
    • M
      virsh: make domiftune interface help string consistent · 4b227307
      Martin Kletzander 提交于
      Append '(MAC Address)' after the help string of domiftune virsh
      command as it takes the same type of argument as domif-{get,set}link
      which have it specified.
      4b227307
    • G
      LXC: avoid useless duplicate memory free · 00828beb
      Gao feng 提交于
      when lxcContainerIdentifyCGroups failed, the memory it allocated
      has been freed, so we should not free this memory again in
      lxcContainerSetupPivortRoot and lxcContainerSetupExtraMounts.
      Signed-off-by: NGao feng <gaofeng@cn.fujitsu.com>
      00828beb
    • P
      driver: Clean up driver header to space indentation · cd639ec5
      Peter Krempa 提交于
      cd639ec5
    • E
      snapshot: merge count and name collection · ec83c716
      Eric Blake 提交于
      Another case where we can do the same amount of work with fewer
      lines of redundant code, which will make adding new filters easier.
      
      * src/conf/domain_conf.c (virDomainSnapshotNameData): Adjust
      struct.
      (virDomainSnapshotObjListCount): Delete, now taken care of...
      (virDomainSnapshotObjListCopyNames): ...here.
      (virDomainSnapshotObjListGetNames): Adjust caller to handle
      counting.
      (virDomainSnapshotObjListNum): Simplify.
      ec83c716
    • E
      snapshot: merge domain and snapshot computation · 7e111c6f
      Eric Blake 提交于
      Now that domain listing is a thin wrapper around child listing,
      it's easier to have a common entry point.  This restores the
      hashForEach optimization lost in the previous patch when there
      are no snapshots being filtered out of the entire list.
      
      * src/conf/domain_conf.h (virDomainSnapshotObjListGetNames)
      (virDomainSnapshotObjListNum): Add parameter.
      (virDomainSnapshotObjListGetNamesFrom)
      (virDomainSnapshotObjListNumFrom): Delete.
      * src/libvirt_private.syms (domain_conf.h): Drop deleted functions.
      * src/conf/domain_conf.c (virDomainSnapshotObjListGetNames):
      Merge, and (re)add an optimization.
      * src/qemu/qemu_driver.c (qemuDomainUndefineFlags)
      (qemuDomainSnapshotListNames, qemuDomainSnapshotNum)
      (qemuDomainSnapshotListChildrenNames)
      (qemuDomainSnapshotNumChildren): Update callers.
      * src/qemu/qemu_migration.c (qemuMigrationIsAllowed): Likewise.
      * src/conf/virdomainlist.c (virDomainListPopulate): Likewise.
      7e111c6f
    • E
      snapshot: use metaroot node to simplify management · 06d4a1e4
      Eric Blake 提交于
      This idea was first suggested by Daniel Veillard here:
      https://www.redhat.com/archives/libvir-list/2011-October/msg00353.html
      
      Now that I am about to add more complexity to snapshot listing, it
      makes sense to avoid code duplication and special casing for domain
      listing (all snapshots) vs. snapshot listing (descendants); adding
      a metaroot reduces the number of code lines by having the domain
      listing turn into a descendant listing of the metaroot.
      
      Note that this has one minor pessimization - if we are going to list
      ALL snapshots without filtering, then virHashForeach is more efficient
      than recursing through the child relationships; restoring that minor
      optimization will occur in the next patch.
      
      * src/conf/domain_conf.h (_virDomainSnapshotObj)
      (_virDomainSnapshotObjList): Repurpose some fields.
      (virDomainSnapshotDropParent): Drop unused parameter.
      * src/conf/domain_conf.c (virDomainSnapshotObjListGetNames)
      (virDomainSnapshotObjListCount): Simplify.
      (virDomainSnapshotFindByName, virDomainSnapshotSetRelations)
      (virDomainSnapshotDropParent): Match new field semantics.
      * src/qemu/qemu_driver.c (qemuDomainSnapshotCreateXML)
      (qemuDomainSnapshotReparentChildren, qemuDomainSnapshotDelete):
      Adjust clients.
      06d4a1e4
    • G
      openvz: Fix wordsize on 64 bit architectures · 7dcee3f9
      Guido Günther 提交于
      The word size there is 64 bit not 8.
      7dcee3f9
    • P
      conf: Add helper for listing domains on drivers supporting virDomainObj · 2c680804
      Peter Krempa 提交于
      This patch adds common code to list domains in fashion used by
      virListAllDomains with all currently supported flags. The header file
      also contains macros that group filters together that are used to
      shorten filter conditions.
      2c680804
    • P
      conf: Store managed save image existence in virDomainObj · bc8e1559
      Peter Krempa 提交于
      This patch stores existence of the image in the object. At start of the
      daemon the state is checked and then updated in key moments in domain
      lifecycle.
      bc8e1559
    • P
      remote: implement remote protocol for virConnectListAllDomains() · 9c9de4e6
      Peter Krempa 提交于
      This patch wires up the RPC protocol handlers for
      virConnectListAllDomains(). The RPC generator has no support for the way
      how virConnectListAllDomains() returns the results so the handler code
      had to be done manually.
      
      The new api is handled by REMOTE_PROC_CONNECT_LIST_ALL_DOMAINS, with
      number 273 and marked with high priority.
      9c9de4e6