1. 27 9月, 2011 1 次提交
    • L
      qemu: add ability to set PCI device "rombar" on or off · dc79852a
      Laine Stump 提交于
      This patch was made in response to:
      
        https://bugzilla.redhat.com/show_bug.cgi?id=738095
      
      In short, qemu's default for the rombar setting (which makes the
      firmware ROM of a PCI device visible/not on the guest) was previously
      0 (not visible), but they recently changed the default to 1
      (visible). Unfortunately, there are some PCI devices that fail in the
      guest when rombar is 1, so the setting must be exposed in libvirt to
      prevent a regression in behavior (it will still require explicitly
      setting <rom bar='off'/> in the guest XML).
      
      rombar is forced on/off by adding:
      
        <rom bar='on|off'/>
      
      inside a <hostdev> element that defines a PCI device. It is currently
      ignored for all other types of devices.
      
      At the moment there is no clean method to determine whether or not the
      rombar option is supported by QEMU - this patch uses the advice of a
      QEMU developer to assume support for qemu-0.12+. There is currently a
      patch in the works to put this information in the output of "qemu-kvm
      -device pci-assign,?", but of course if we switch to keying off that,
      we would lose support for setting rombar on all the versions of qemu
      between 0.12 and whatever version gets that patch.
      dc79852a
  2. 23 9月, 2011 1 次提交
    • O
      Add unsafe cache mode support for disk driver · f887334d
      Oskari Saarenmaa 提交于
      QEMU 0.13 introduced cache=unsafe for -drive, this patch exposes
      it in the libvirt layer.
      
        * Introduced a new QEMU capability flag ($prefix_CACHE_UNSAFE),
          as even if $prefix_CACHE_V2 is set, we can't know if unsafe
          is supported.
      
        * Improved the reliability of qemu cache type detection.
      f887334d
  3. 22 9月, 2011 1 次提交
    • E
      snapshot: prepare to remove transient snapshot metadata · bcf974b9
      Eric Blake 提交于
      This patch is mostly code motion - moving some functions out
      of qemu_driver and into qemu_domain so they can be reused by
      multiple qemu_* files (since qemu_driver.h must not grow).
      It also adds a new helper function, qemuDomainRemoveInactive,
      which will be used in the next patch.
      
      * src/qemu/qemu_domain.h (qemuFindQemuImgBinary)
      (qemuDomainSnapshotWriteMetadata, qemuDomainSnapshotForEachQcow2)
      (qemuDomainSnapshotDiscard, qemuDomainSnapshotDiscardAll)
      (qemuDomainRemoveInactive): New prototypes.
      (struct qemu_snap_remove): New struct.
      * src/qemu/qemu_domain.c (qemuDomainRemoveInactive)
      (qemuDomainSnapshotDiscardAllMetadata): New functions.
      (qemuFindQemuImgBinary, qemuDomainSnapshotWriteMetadata)
      (qemuDomainSnapshotForEachQcow2, qemuDomainSnapshotDiscard)
      (qemuDomainSnapshotDiscardAll): Move here...
      * src/qemu/qemu_driver.c (qemuFindQemuImgBinary)
      (qemuDomainSnapshotWriteMetadata, qemuDomainSnapshotForEachQcow2)
      (qemuDomainSnapshotDiscard, qemuDomainSnapshotDiscardAll): ...from
      here.
      (qemuDomainUndefineFlags): Update caller.
      * src/conf/domain_conf.c (virDomainRemoveInactive): Doc fixes.
      bcf974b9
  4. 20 9月, 2011 1 次提交
    • O
      conf: Assign newDef of active domain as persistent conf if it is NULL · b4c3be59
      Osier Yang 提交于
      Libvirt loads the domain conf from status XML if it's running when
      starting up. The problem is there is no record of the original conf.
      (dom->newDef is NULL here).
      
      So libvirt won't be able to restore the domain conf to original one
      when destroying/shutdown. E.g.
      
      1) attach a device without "--persistent"
      2) restart libvirtd
      3) destroy domain
      4) start domain
      
      One will see the the disk still exists.
      
      This patch is to fix the peoblem by assigning persistent domain conf
      to dom->newDef if it's NULL and the domain is running.
      b4c3be59
  5. 16 9月, 2011 3 次提交
    • J
      qemu: Introduce shutdown reason for paused state · d2d67763
      Jiri Denemark 提交于
      Qemu sends STOP event as part of the shutdown process. Detect such STOP
      event and consider shutdown to be reason of emitting such event. That's
      the best we can do until qemu provides us the reason directly in STOP
      event. This allows us to report shutdown reason for paused state so that
      apps can detect domains that failed to finish the shutdown process
      (e.g., because qemu is buggy and doesn't exit on SIGTERM or it is
      blocked in flushing disk buffers).
      d2d67763
    • A
      conf: avoid memory leak on virDomainDefParseXML · b9961102
      Alex Jia 提交于
      * conf/domain_conf.c: allocate memory to def->redirdevs in
        virDomainDefParseXML such as VIR_ALLOC_N(def->redirdevs, n),
        however, virDomainDefFree(def) hasn't released these memory.
      
      * Detected in valgrind run:
      
      ==19820== 209 (16 direct, 193 indirect) bytes in 1 blocks are definitely lost in loss record 25 of 26
      ==19820==    at 0x4A04A28: calloc (vg_replace_malloc.c:467)
      ==19820==    by 0x4A13AF: virAllocN (memory.c:129)
      ==19820==    by 0x4D4A0E: virDomainDefParseXML (domain_conf.c:7258)
      ==19820==    by 0x4D4C93: virDomainDefParseNode (domain_conf.c:7512)
      ==19820==    by 0x4D562F: virDomainDefParse (domain_conf.c:7465)
      ==19820==    by 0x415863: testCompareXMLToXMLFiles (qemuxml2xmltest.c:35)
      ==19820==    by 0x415982: testCompareXMLToXMLHelper (qemuxml2xmltest.c:80)
      ==19820==    by 0x416D31: virtTestRun (testutils.c:140)
      ==19820==    by 0x415604: mymain (qemuxml2xmltest.c:192)
      ==19820==    by 0x416437: virtTestMain (testutils.c:689)
      ==19820==    by 0x3CA7A1ECDC: (below main) (in /lib64/libc-2.12.so)
      ==19820==
      ==19820== LEAK SUMMARY:
      ==19820==    definitely lost: 16 bytes in 1 blocks
      ==19820==    indirectly lost: 193 bytes in 5 blocks
      ==19820==      possibly lost: 0 bytes in 0 blocks
      ==19820==    still reachable: 1,054 bytes in 21 blocks
      
      * How to reproduce?
      % valgrind -v --leak-check=full ./tests/qemuxml2xmltest
      Signed-off-by: NAlex Jia <ajia@redhat.com>
      b9961102
    • P
      Avoid using "devname" as an identifier. · 79cf07af
      Peter Krempa 提交于
      /usr/lib/stdlib.h in Mac OS X and probably also in BSD's
      exports this symbol :(
      79cf07af
  6. 15 9月, 2011 1 次提交
  7. 14 9月, 2011 2 次提交
    • E
      snapshot: ABI stability must include memory sizing · f2fc1eee
      Eric Blake 提交于
      Commit 973fcd8f introduced the ability for qemu to reject snapshot
      reversion on an ABI incompatibility; but the very example that was
      first proposed on-list[1] as a demonstration of an ABI incompatibility,
      namely that of changing the max memory allocation, was not being
      checked for, resulting in a cryptic failure when running with larger
      max mem than what the snapshot was created with:
      error: operation failed: Error -22 while loading VM state
      
      This commit merely protects the three variables within mem that are
      referenced by qemu_command.c, rather than all 7 (the other 4 variables
      affect cgroup handling, but as far as I can tell, have no visible effect
      to the qemu guest).  This also affects migration and save file handling,
      which are other places where we perform ABI compatibility checks.
      
      [1] https://www.redhat.com/archives/libvir-list/2010-December/msg00331.html
      
      * src/conf/domain_conf.c (virDomainDefCheckABIStability): Add
      memory sizing checks.
      f2fc1eee
    • P
      xml: Clean up rest of virtual XML document names for XML strings · b998f1f7
      Peter Krempa 提交于
      Commit 498d7833 cleans up some of virtual file names for parsing strings
      in memory. This patch cleans up (hopefuly) the rest forgotten by the
      first patch.
      
      This patch also changes all of the previously modified "filenames" to
      valid URI's replacing spaces for underscores.
      
      Changes to v1:
      - Replace all spaces for underscores, so that the strings form valid
        URI's
      - Replace spaces in places changed by commit 498d7833
      b998f1f7
  8. 09 9月, 2011 1 次提交
    • P
      xml: Change virtual file names of xml documents parsed in memory · 498d7833
      Peter Krempa 提交于
      While parsing XML strings from memory, the previous convention in
      libvirt was to set the virtual file name to "domain.xml" or something
      similar. This could potentialy trick the user into looking for a file
      named domain.xml on the disk in an attempt to fix the error.
      
      This patch changes these filenames to something that can't be as easily
      confused for a valid filename.
      
      Examples of error messages:
      ---------------------------
      Error while loading file from disk:
      
      15:07:59.015: 527: error : catchXMLError:709 : /path/to/domain.xml:1: StartTag: invalid element name
      <domain type='kvm'><
      --------------------^
      
      Error while parsing definition in memory:
      
      15:08:43.581: 525: error : catchXMLError:709 : (domain definition):2: error parsing attribute name
        <name>vm1</name>
      --^
      498d7833
  9. 08 9月, 2011 1 次提交
    • E
      snapshot: fix regression with system checkpoints · 2acd4a16
      Eric Blake 提交于
      Regression introduced in commit d6f6b2d1.  Running
      'virsh snapshot-create dom' would mistakenly report that
      disks can only be specified for disk snapshots.
      
      * src/conf/domain_conf.c (virDomainSnapshotDefParseString): Only
      give error about no disk support when <disk> was found.
      2acd4a16
  10. 06 9月, 2011 2 次提交
    • P
      link-state: conf: Add element to XML for controling link state · edd1295e
      Peter Krempa 提交于
      A new element is introduced to XML that allows to control
      state of virtual network interfaces in hypervisors.
      
      Live modification of the link state allows networking tools
      propagate topology changes to guest OS or testing of
      scenarios in complex (virtual) networks.
      
      This patch adds elements to XML grammars and parsing and generating
      code.
      edd1295e
    • M
      redirdev: allows to specify device address · 2e0dbaad
      Marc-André Lureau 提交于
      It is important to be able to attach USB redirected devices to a
      particular controller (one that supports USB2 for instance).
      Without this patch, only the default bus was used.
      
           <redirdev bus='usb' type='spicevmc'>
             <address type='usb' bus='0' port='4'/>
           </redirdev>
      2e0dbaad
  11. 05 9月, 2011 6 次提交
    • E
      snapshot: make it possible to audit external snapshot · c111517a
      Eric Blake 提交于
      Snapshots alter the set of disk image files opened by qemu, so
      they must be audited.  But they don't involve a full disk definition
      structure, just the new filename.  Make the next patch easier by
      refactoring the audit routines to just operate on file name.
      
      * src/conf/domain_audit.h (virDomainAuditDisk): Update prototype.
      * src/conf/domain_audit.c (virDomainAuditDisk): Act on strings,
      not definition structures.
      (virDomainAuditStart): Update caller.
      * src/qemu/qemu_hotplug.c (qemuDomainChangeEjectableMedia)
      (qemuDomainAttachPciDiskDevice, qemuDomainAttachSCSIDisk)
      (qemuDomainAttachUsbMassstorageDevice)
      (qemuDomainDetachPciDiskDevice, qemuDomainDetachDiskDevice):
      Likewise.
      c111517a
    • E
      snapshot: also support disks by path · 89b6284f
      Eric Blake 提交于
      I got confused when 'virsh domblkinfo dom disk' required the
      path to a disk (which can be ambiguous, since a single file
      can back multiple disks), rather than the unambiguous target
      device name that I was using in disk snapshots.  So, in true
      developer fashion, I went for the best of both worlds - all
      interfaces that operate on a disk (aka block) now accept
      either the target name or the unambiguous path to the backing
      file used by the disk.
      
      * src/conf/domain_conf.h (virDomainDiskIndexByName): Add
      parameter.
      (virDomainDiskPathByName): New prototype.
      * src/libvirt_private.syms (domain_conf.h): Export it.
      * src/conf/domain_conf.c (virDomainDiskIndexByName): Also allow
      searching by path, and decide whether ambiguity is okay.
      (virDomainDiskPathByName): New function.
      (virDomainDiskRemoveByName, virDomainSnapshotAlignDisks): Update
      callers.
      * src/qemu/qemu_driver.c (qemudDomainBlockPeek)
      (qemuDomainAttachDeviceConfig, qemuDomainUpdateDeviceConfig)
      (qemuDomainGetBlockInfo, qemuDiskPathToAlias): Likewise.
      * src/qemu/qemu_process.c (qemuProcessFindDomainDiskByPath):
      Likewise.
      * src/libxl/libxl_driver.c (libxlDomainAttachDeviceDiskLive)
      (libxlDomainDetachDeviceDiskLive, libxlDomainAttachDeviceConfig)
      (libxlDomainUpdateDeviceConfig): Likewise.
      * src/uml/uml_driver.c (umlDomainBlockPeek): Likewise.
      * src/xen/xend_internal.c (xenDaemonDomainBlockPeek): Likewise.
      * docs/formatsnapshot.html.in: Update documentation.
      * tools/virsh.pod (domblkstat, domblkinfo): Likewise.
      * docs/schemas/domaincommon.rng (diskTarget): Tighten pattern on
      disk targets.
      * docs/schemas/domainsnapshot.rng (disksnapshot): Update to match.
      * tests/domainsnapshotxml2xmlin/disk_snapshot.xml: Update test.
      89b6284f
    • E
      snapshot: add <disks> to snapshot xml · d6f6b2d1
      Eric Blake 提交于
      Adds an optional element to <domainsnapshot>, which will be used
      to give user control over external snapshot filenames on input,
      and specify generated filenames on output.
      
      For now, no driver accepts this element; that will come later.
      
      <domainsnapshot>
        ...
        <disks>
          <disk name='vda' snapshot='no'/>
          <disk name='vdb' snapshot='internal'/>
          <disk name='vdc' snapshot='external'>
            <driver type='qcow2'/>
            <source file='/path/to/new'/>
          </disk>
        </disks>
        <domain>
          ...
          <devices>
            <disk ...>
              <driver name='qemu' type='raw'/>
              <target dev='vdc'/>
              <source file='/path/to/old'/>
            </disk>
          </devices>
        </domain>
      </domainsnapshot>
      
      * src/conf/domain_conf.h (_virDomainSnapshotDiskDef): New type.
      (_virDomainSnapshotDef): Add new elements.
      (virDomainSnapshotAlignDisks): New prototype.
      * src/conf/domain_conf.c (virDomainSnapshotDiskDefClear)
      (virDomainSnapshotDiskDefParseXML, disksorter)
      (virDomainSnapshotAlignDisks): New functions.
      (virDomainSnapshotDefParseString): Parse new fields.
      (virDomainSnapshotDefFree): Clean them up.
      (virDomainSnapshotDefFormat): Output them.
      * src/libvirt_private.syms (domain_conf.h): Export new function.
      * docs/schemas/domainsnapshot.rng (domainsnapshot, disksnapshot):
      Add more xml.
      * docs/formatsnapshot.html.in: Document it.
      * tests/domainsnapshotxml2xmlin/disk_snapshot.xml: New test.
      * tests/domainsnapshotxml2xmlout/disk_snapshot.xml: Update.
      d6f6b2d1
    • E
      snapshot: support extra state in snapshots · 5b30b08d
      Eric Blake 提交于
      In order to distinguish disk snapshots from system checkpoints, a
      new state value that is only valid for snapshots is helpful.
      
      * include/libvirt/libvirt.h.in (VIR_DOMAIN_LAST): New placeholder.
      * src/conf/domain_conf.h (virDomainSnapshotState): New enum mapping.
      (VIR_DOMAIN_DISK_SNAPSHOT): New internal enum value.
      * src/conf/domain_conf.c (virDomainState): Use placeholder.
      (virDomainSnapshotState): Extend mapping by one for use in snapshot.
      (virDomainSnapshotDefParseString, virDomainSnapshotDefFormat):
      Handle new state.
      (virDomainObjSetState, virDomainStateReasonToString)
      (virDomainStateReasonFromString): Avoid compiler warnings.
      * tools/virsh.c (vshDomainState, vshDomainStateReasonToString):
      Likewise.
      * src/libvirt_private.syms (domain_conf.h): Export new functions.
      * docs/schemas/domainsnapshot.rng: Tighten state definition.
      * docs/formatsnapshot.html.in: Document it.
      * tests/domainsnapshotxml2xmlout/disk_snapshot.xml: New test.
      5b30b08d
    • E
      snapshot: additions to domain xml for disks · 47123530
      Eric Blake 提交于
      As discussed here:
      https://www.redhat.com/archives/libvir-list/2011-August/msg00361.html
      https://www.redhat.com/archives/libvir-list/2011-August/msg00552.html
      
      Adds snapshot attribute and transient sub-element:
      
      <devices>
        <disk type=... snapshot='no|internal|external'>
          ...
          <transient/>
        </disk>
      </devices>
      
      * docs/schemas/domaincommon.rng (snapshot): New define.
      (disk): Add snapshot and persistent attributes.
      * docs/formatdomain.html.in: Document them.
      * src/conf/domain_conf.h (virDomainDiskSnapshot): New enum.
      (_virDomainDiskDef): New fields.
      * tests/qemuxml2argvdata/qemuxml2argv-disk-transient.xml: New
      test of rng, no args counterpart until qemu support is complete.
      * tests/qemuxml2argvdata/qemuxml2argv-disk-snapshot.args: New
      file, snapshot attribute does not affect args.
      * tests/qemuxml2argvdata/qemuxml2argv-disk-snapshot.xml: Likewise.
      * tests/qemuxml2argvtest.c (mymain): Run new test.
      47123530
    • L
      Check for source conflicts in storage pools · 5a1f2728
      Lei Li 提交于
      Fix bug #611823 storage driver should prohibit pools with duplicate
      underlying storage.
      
      Add internal API virStoragePoolSourceFindDuplicate() to do uniqueness
      check based on source location infomation for pool type.
      
      * AUTHORS: add Lei Li
      5a1f2728
  12. 03 9月, 2011 8 次提交
    • E
      snapshot: correctly escape generated xml · 8352e04d
      Eric Blake 提交于
      Commit 69278878 fixed one direction of arbitrarily-named snapshots,
      but not the round trip path.  While auditing domain_conf, I found
      a couple other instances that weren't escaping arbitrary strings.
      
      * src/conf/domain_conf.c (virDomainFSDefFormat)
      (virDomainGraphicsListenDefFormat, virDomainSnapshotDefFormat):
      Escape arbitrary strings.
      8352e04d
    • E
      snapshot: allow full domain xml in snapshot · f609cb85
      Eric Blake 提交于
      Just like VM saved state images (virsh save), snapshots MUST
      track the inactive domain xml to detect any ABI incompatibilities.
      
      The indentation is not perfect, but functionality comes before form.
      
      Later patches will actually supply a full domain; for now, this
      wires up the storage to support one, but doesn't ever generate one
      in dumpxml output.
      
      Happily, libvirt.c was already rejecting use of VIR_DOMAIN_XML_SECURE
      from read-only connections, even though before this patch, there was
      no information to be secured by the use of that flag.
      
      And while we're at it, mark the libvirt snapshot metadata files
      as internal-use only.
      
      * src/libvirt.c (virDomainSnapshotGetXMLDesc): Document flag.
      * src/conf/domain_conf.h (_virDomainSnapshotDef): Add member.
      (virDomainSnapshotDefParseString, virDomainSnapshotDefFormat):
      Update signature.
      * src/conf/domain_conf.c (virDomainSnapshotDefFree): Clean up.
      (virDomainSnapshotDefParseString): Optionally parse domain.
      (virDomainSnapshotDefFormat): Output full domain.
      * src/esx/esx_driver.c (esxDomainSnapshotCreateXML)
      (esxDomainSnapshotGetXMLDesc): Update callers.
      * src/vbox/vbox_tmpl.c (vboxDomainSnapshotCreateXML)
      (vboxDomainSnapshotGetXMLDesc): Likewise.
      * src/qemu/qemu_driver.c (qemuDomainSnapshotCreateXML)
      (qemuDomainSnapshotLoad, qemuDomainSnapshotGetXMLDesc)
      (qemuDomainSnapshotWriteMetadata): Likewise.
      * docs/formatsnapshot.html.in: Rework doc example.
      Based on a patch by Philipp Hahn.
      f609cb85
    • E
      snapshot: refactor domain xml output · 0ce68c66
      Eric Blake 提交于
      Minor semantic change - allow domain xml to be generated in place
      within a larger buffer, rather than having to go through a
      temporary string.
      
      * src/conf/domain_conf.c (virDomainDefFormatInternal): Add
      parameter.
      (virDomainDefFormat, virDomainObjFormat): Update callers.
      0ce68c66
    • E
      snapshot: add qemu snapshot redefine support · bd18b967
      Eric Blake 提交于
      Redefining a qemu snapshot requires a bit of a tweak to the common
      snapshot parsing code, but the end result is quite nice.
      
      Be careful that redefinitions do not introduce circular parent
      chains.  Also, we don't want to allow conversion between online
      and offline existing snapshots.  We could probably do some more
      validation for snapshots that don't already exist to make sure
      they are even feasible, by parsing qemu-img output, but that
      can come later.
      
      * src/conf/domain_conf.h (virDomainSnapshotParseFlags): New
      internal flags.
      * src/conf/domain_conf.c (virDomainSnapshotDefParseString): Alter
      signature to take internal flags.
      * src/esx/esx_driver.c (esxDomainSnapshotCreateXML): Update caller.
      * src/vbox/vbox_tmpl.c (vboxDomainSnapshotCreateXML): Likewise.
      * src/qemu/qemu_driver.c (qemuDomainSnapshotCreateXML): Support
      new public flags.
      bd18b967
    • E
      snapshot: identify qemu snapshot roots · 6b3801b0
      Eric Blake 提交于
      Filtering for roots is pretty easy to do.
      
      * src/conf/domain_conf.h (virDomainSnapshotObjListGetNames)
      (virDomainSnapshotObjListNum): Update prototype.
      * src/conf/domain_conf.c (virDomainSnapshotObjListCopyNames)
      (virDomainSnapshotObjListGetNames, virDomainSnapshotObjListCount)
      (virDomainSnapshotObjListNum): Support filtering.
      * src/qemu/qemu_driver.c (qemuDomainSnapshotNum)
      (qemuDomainSnapshotListNames): Update callers.
      6b3801b0
    • E
      snapshot: simplify acting on just children · 67555b24
      Eric Blake 提交于
      Similar to the last patch in isolating the filtering from the
      client actions, so that clients don't have to reinvent the
      filtering.
      
      * src/conf/domain_conf.h (virDomainSnapshotForEachChild): New
      prototype.
      * src/libvirt_private.syms (domain_conf.h): Export it.
      * src/conf/domain_conf.c (virDomainSnapshotActOnChild)
      (virDomainSnapshotForEachChild): New functions.
      (virDomainSnapshotCountChildren): Delete.
      (virDomainSnapshotHasChildren): Simplify.
      * src/qemu/qemu_driver.c (qemuDomainSnapshotReparentChildren)
      (qemuDomainSnapshotDelete): Likewise.
      67555b24
    • E
      snapshot: avoid crash when deleting qemu snapshots · cb231b4b
      Eric Blake 提交于
      This one's nasty.  Ever since we fixed virHashForEach to prevent
      nested hash iterations for safety reasons (commit fba550f6),
      virDomainSnapshotDelete with VIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN
      has been broken for qemu: it deletes children, while leaving
      grandchildren intact but pointing to a no-longer-present parent.
      But even before then, the code would often appear to succeed to
      clean up grandchildren, but risked memory corruption if you have
      a large and deep hierarchy of snapshots.
      
      For acting on just children, a single virHashForEach is sufficient.
      But for acting on an entire subtree, it requires iteration; and
      since we declared recursion as invalid, we have to switch to a
      while loop.  Doing this correctly requires quite a bit of overhaul,
      so I added a new helper function to isolate the algorithm from the
      actions, so that callers do not have to reinvent the iteration.
      
      Note that this _still_ does not handle CHILDREN correctly if one
      of the children is the current snapshot; that will be next.
      
      * src/conf/domain_conf.h (_virDomainSnapshotDef): Add mark.
      (virDomainSnapshotForEachDescendant): New prototype.
      * src/libvirt_private.syms (domain_conf.h): Export it.
      * src/conf/domain_conf.c (virDomainSnapshotMarkDescendant)
      (virDomainSnapshotActOnDescendant)
      (virDomainSnapshotForEachDescendant): New functions.
      * src/qemu/qemu_driver.c (qemuDomainSnapshotDiscardChildren):
      Replace...
      (qemuDomainSnapshotDiscardDescenent): ...with callback that
      doesn't nest hash traversal.
      (qemuDomainSnapshotDelete): Use new function.
      cb231b4b
    • E
      snapshot: speed up snapshot location · a31d6569
      Eric Blake 提交于
      Each snapshot lookup was iterating over the entire hash table, O(n),
      instead of honing in directly on the hash key, amortized O(1).
      
      Besides, fixing this means that virDomainSnapshotFindByName can now
      be used inside another virHashForeach iteration (without this patch,
      attempts to lookup a snapshot by name during a hash iteration will
      fail due to nested iteration).
      
      * src/conf/domain_conf.c (virDomainSnapshotFindByName): Simplify.
      (virDomainSnapshotObjListSearchName): Delete unused function.
      a31d6569
  13. 02 9月, 2011 10 次提交
  14. 01 9月, 2011 2 次提交