1. 24 4月, 2014 20 次提交
    • J
      conf: Format and parse backing chains in domain XML · 546154e3
      Jiri Denemark 提交于
      This patch implements formating and parsing code for the backing store
      schema defined and documented by the previous patch.
      
      This patch does not aim at providing full persistent storage of disk
      backing chains yet. The formatter is supposed to provide the backing
      chain detected when starting a domain and thus it is not formatted into
      an inactive domain XML. The parser is implemented mainly for the purpose
      of testing the XML generated by the formatter and thus it does not
      distinguish between no backingStore element and an empty backingStore
      element. This will have to change once we fully implement support for
      user-supplied backing chains.
      Signed-off-by: NJiri Denemark <jdenemar@redhat.com>
      546154e3
    • J
      conf: Output disk backing store details in domain XML · a2e369bc
      Jiri Denemark 提交于
      The XML for quite a longish backing chain is shown below:
      
        <disk type='network' device='disk'>
          <driver name='qemu' type='qcow2'/>
          <source protocol='nbd' name='bar'>
            <host transport='unix' socket='/var/run/nbdsock'/>
          </source>
          <backingStore type='block' index='1'>
            <format type='qcow2'/>
            <source dev='/dev/HostVG/QEMUGuest1'/>
            <backingStore type='file' index='2'>
              <format type='qcow2'/>
              <source file='/tmp/image2.qcow'/>
              <backingStore type='file' index='3'>
                <format type='qcow2'/>
                <source file='/tmp/image3.qcow'/>
                <backingStore type='file' index='4'>
                  <format type='qcow2'/>
                  <source file='/tmp/image4.qcow'/>
                  <backingStore type='file' index='5'>
                    <format type='qcow2'/>
                    <source file='/tmp/image5.qcow'/>
                    <backingStore type='file' index='6'>
                      <format type='raw'/>
                      <source file='/tmp/Fedora-17-x86_64-Live-KDE.iso'/>
                      <backingStore/>
                    </backingStore>
                  </backingStore>
                </backingStore>
              </backingStore>
            </backingStore>
          </backingStore>
          <target dev='vdb' bus='virtio'/>
        </disk>
      
      Various disk types and formats can be mixed in one chain. The
      <backingStore/> empty element marks the end of the backing chain and it
      is there mostly for future support of parsing the chain provided by a
      user. If it's missing, we are supposed to probe for the rest of the
      chain ourselves, otherwise complete chain was provided by the user. The
      index attributes of backingStore elements can be used to unambiguously
      identify a specific part of the image chain.
      Signed-off-by: NJiri Denemark <jdenemar@redhat.com>
      a2e369bc
    • D
      Fix pci bus naming for PPC · 27b2b987
      Daniel P. Berrange 提交于
      Recent discussions around naming of 'pci' vs 'pci.0' for PPC
      made me go back and look at the PPC emulator in every historical
      version of QEMU since 1.0. The results were worse than I imagined.
      This patch adds the logic required to make libvirt work with PPC
      correctly with naming variations across all versions & machine
      types.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      27b2b987
    • P
      util: storage: Invert the way recursive metadata retrieval works · 8823272d
      Peter Krempa 提交于
      To avoid having the root of a backing chain present twice in the list we
      need to invert the working of virStorageFileGetMetadataRecurse.
      
      Until now the recursive worker created a new backing chain element from
      the name and other information passed as arguments. This required us to
      pass the data of the parent in a deconstructed way and the worker
      created a new entry for the parent.
      
      This patch converts this function so that it just fills in metadata
      about the parent and creates a backing chain element from those. This
      removes the duplication of the first element.
      
      To avoid breaking the test suite, virstoragetest now calls a wrapper
      that creates the parent structure explicitly and pre-fills it with the
      test data with same function signature as previously used.
      8823272d
    • P
      util: virstoragefile: Don't mangle data stored about directories · cc92ee32
      Peter Krempa 提交于
      Don't remove detected metadata about directory based storage volumes.
      cc92ee32
    • P
      storage: Move disk->backingChain to the recursive disk->src.backingStore · 44551275
      Peter Krempa 提交于
      Switch over to storing of the backing chain as a recursive
      virStorageSource structure.
      
      This is a string based move. Currently the first element will be present
      twice in the backing chain as currently the retrieval function stores
      the parent in the newly detected chain. This will be fixed later.
      44551275
    • P
      util: virstoragefile: Rename backingMeta to backingStore · b627b8fd
      Peter Krempa 提交于
      To conform with the naming of the planned XML output rename the metadata
      variable name.
      
      s/backingMeta/backingStore/g
      b627b8fd
    • P
      util: virstorage: Kill struct virStorageFileMetadata · 4905b983
      Peter Krempa 提交于
      Remove the now unused pieces of the structure.
      4905b983
    • P
      maint: Switch over from struct virStorageFileMetadata to virStorageSource · d64d9ff9
      Peter Krempa 提交于
      Replace the old structure with the new one. This change is a trivial
      name change operation (along with change of the freeing function).
      d64d9ff9
    • P
      util: storagefile: Add fields from virStorageMetadata to virStorageSource · 0b5161d9
      Peter Krempa 提交于
      Add the required fields that are missing from the new structure that
      will allow us to switch the storage file metadata code entirely to the
      new structure.
      
      Add "relPath" and "relDir" and the raw backing store name. Also allow
      creating linked lists of virStorageSourcePtrs to express backing chains.
      0b5161d9
    • P
      util: storagefile: Add function to free a virStorageSourcePtr · 0bd54a10
      Peter Krempa 提交于
      Add a free function as some parts of the code will allocate the
      structure.
      0bd54a10
    • P
      virstoragefile: Kill "backingStore" field from virStorageFileMetadata · 39c5aa4e
      Peter Krempa 提交于
      Remove the obsolete field replaced by data in "path".
      
      The testsuite requires tweaking as the name of the backing file is now
      stored one layer deeper in the backing chain linked list.
      39c5aa4e
    • P
      util: virstoragefile: Don't use "backingStore" directly · c366a1ef
      Peter Krempa 提交于
      As a temporary step to allow killing of the "backingStore" field of
      struct virStorageFileMetadata the recursive metadata retrieval function
      will be converted not to use the field in the lookup process.
      c366a1ef
    • P
      util: storagefile: Rename "canonPath" to "path" in virStorageFileMetadata · 05bc536c
      Peter Krempa 提交于
      As for the previous patch, this change is needed to achieve
      compatibility with all the existing code, where we expect a fully
      qualified path of local files to be present.
      05bc536c
    • P
      util: storage: Rename "path" to "relPath" in virStorageFileMetadata · f34b8296
      Peter Krempa 提交于
      To allow future change of virStorageFileMetadata to virStorageSource we
      need to store a full path in the "path" variable as rest of the code
      expects it to be a full path. Rename the "path" field to "relPath" to
      keep tracking the info but allowing a real "path" field.
      f34b8296
    • P
      storage: util: Clean up arguments of virStorageFileGetMetadataInternal · 66d92473
      Peter Krempa 提交于
      Avoid passing lot of arguments into guts of metadata retrieval to fill
      the actual structure. Temporarily fill the structure before passing it
      down to the actual metadata extractor.
      
      This will later help the inversion of the steps taken to extract the
      metadata so that this function can be fully converted to
      virStorageSource as the data struct.
      
      This patch also fixes regression when starting a gluster storage pool
      where the volumes don't have local representation so that the
      canonicalization of the volume's file name failed. Broken by commit
      79f11b35
      66d92473
    • P
      util: storage: Move checking of the actual backing image to the worker · 67084ed4
      Peter Krempa 提交于
      Move the code checking the presence of the backing file to the recursive
      worker function instead of the metadata parser. The recursive worker
      will later be changed to parse more than just local files and this
      change will help the separation.
      67084ed4
    • P
      util: storage: Remove obsolete argument virStorageFileGetMetadataInternal · 5c43e2e0
      Peter Krempa 提交于
      As we already pass the whole structure down the call path there's no
      need to return some stuff in a separate argument. Remove the argument
      and tweak callers to avoid breaking semantics.
      
      virStorageFileGetMetadataFromBuf will be refactored later along with the
      storage driver.
      5c43e2e0
    • P
      util: storagefile: Always store raw backing name in the metadata · 9944b710
      Peter Krempa 提交于
      Don't use the backingStoreRaw as a indication of broken chains. Fill it
      always and tweak the broken image chain detector to avoid changing the
      semantics.
      
      The new semantics to detect a broken chain is the presence of string in
      backingStoreRaw but the lack of the backing chain metadata structure in
      the chain.
      
      Now that the raw backing store name is always filled there's no need to
      pass the raw name variable separately to fill in case the backing is not
      a file. Tweak the function so that it can handle a NULL in that case.
      9944b710
    • P
      qemu: unexport qemuDiskChainCheckBroken · 00c27242
      Peter Krempa 提交于
      The function isn't used in any other source file. Move it so that it
      doesn't need a declaration.
      00c27242
  2. 23 4月, 2014 4 次提交
  3. 22 4月, 2014 5 次提交
  4. 20 4月, 2014 1 次提交
  5. 18 4月, 2014 4 次提交
    • L
      docs: document that vfio is default for hostdev networks too · 668bf07f
      Laine Stump 提交于
      When the default was changed from kvm to vfio, the documentation for
      hostdev and interface was changed, but the documentation in <network>
      was forgotten.
      
      Also document when the default was changed from "always kvm" to "vfio
      if available, else kvm" (1.0.5).
      668bf07f
    • J
      Remove QEMU_CAPS_MACHINE_USB_OPT from ComputeCmdFlags · 062074c4
      Ján Tomko 提交于
      The version check is for >=1.3.0, but ComputeCmdFlags
      is only called for QEMU <1.2.0.
      062074c4
    • J
      Only set QEMU_CAPS_NO_HPET on x86 · c3725db8
      Ján Tomko 提交于
      QEMU only supports it on x86, but we've been assuming it for
      all QEMUs when doing QMP capability detection.
      
      https://bugzilla.redhat.com/show_bug.cgi?id=1066145
      c3725db8
    • N
      Fix Memory Leak in virStorageFileGetMetadataRecurse() · ab07a7b3
      Nehal J Wani 提交于
      While running virstoragetest, valgrind pointed out the following
      memory leak:
      
      ==8142== 2 bytes in 1 blocks are definitely lost in loss record 1 of 92
      ==8142==    at 0x4A069EE: malloc (vg_replace_malloc.c:270)
      ==8142==    by 0x4E7B53E: mdir_name (dirname-lgpl.c:78)
      ==8142==    by 0x4CBE2B0: virStorageFileGetMetadataInternal (virstoragefile.c:595)
      ==8142==    by 0x4CBE651: virStorageFileGetMetadataFromFDInternal (virstoragefile.c:1086)
      ==8142==    by 0x4CBEEB4: virStorageFileGetMetadataRecurse (virstoragefile.c:1175)
      ==8142==    by 0x4CBF1DE: virStorageFileGetMetadata (virstoragefile.c:1270)
      ==8142==    by 0x4028AD: testStorageChain (virstoragetest.c:275)
      ==8142==    by 0x407B91: virtTestRun (testutils.c:201)
      ==8142==    by 0x4039D7: mymain (virstoragetest.c:534)
      ==8142==    by 0x40830D: virtTestMain (testutils.c:789)
      ==8142==    by 0x3E6CE1ED1C: (below main) (libc-start.c:226)
      
      ...62 times
      ab07a7b3
  6. 17 4月, 2014 1 次提交
  7. 16 4月, 2014 4 次提交
    • J
      storage: netfs: Handle backend errors · 4090e153
      John Ferlan 提交于
      Commit id '18642d10' caused a virt-test regression for NFS backend
      storage error path checks when running the command:
      
          'virsh find-storage-pool-sources-as netfs Unknown  '
      
      when the host did not have Gluster installed. Prior to the commit,
      the test would fail with the error:
      
          error: internal error: Child process (/usr/sbin/showmount --no-headers
          --exports Unknown) unexpected exit status 1: clnt_create: RPC: Unknown host
      
      After the commit, the error would be ignored, the call would succeed,
      and an empty list of pool sources returned. This was tucked into the
      commit message as an expected outcome.
      
      When the target host does not have a GLUSTER_CLI this is a regression
      over the previous release. Furthermore, even if Gluster CLI was present,
      but had a failure to get devices, the API would return a failure even if
      the NFS backend had found devices.
      
      Modify the logic to return failure when the NFS backend check fails and
      there's no GLUSTER_CLI or when both backend checks fail.
      
      If either returns success and GLUSTER_CLI is defined, then fetch and return
      a list of source devices even if it's empty
      4090e153
    • E
      conf: fix omission of <driver> in domain dumpxml · 8fb44675
      Eric Blake 提交于
      I noticed that depending on the <driver> attributes the user passed
      in, the output may omit the <driver> element altogether.  For example,
      the rerror_policy has had this problem since commit 4bb4109f in Oct
      2011.  But in adding testsuite coverage to expose it, I found another
      problem: the C code is just fine without a driver name, but the
      XML validator required either a name or a cache mode.
      
      * src/conf/domain_conf.c (virDomainDiskDefFormat): Update
      conditional.
      * docs/schemas/domaincommon.rng (diskDriver): Simplify.
      * tests/qemuxml2argvdata/qemuxml2argv-disk-drive-copy-on-read.xml:
      * tests/qemuxml2argvdata/qemuxml2argv-disk-drive-copy-on-read.args:
      New files.
      * tests/qemuxml2argvdata/qemuxml2argv-disk-drive-discard.xml:
      Enhance test.
      * tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-drive-discard.xml:
      Likewise.
      * tests/qemuxml2argvtest.c (mymain): New test.
      * tests/qemuxml2xmltest.c (mymain): Likewise.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Signed-off-by: NJiri Denemark <jdenemar@redhat.com>
      8fb44675
    • E
      conf: split <disk> schema into more pieces · fec1a939
      Eric Blake 提交于
      To make <disk> schema more maintainable and to allow for moving the
      pieces to a common file in the future. It relies on the ability to
      override definitions as part of an include, set up in the previous
      patch.
      
      The diff is a bit hard to read, because it mixes reindentation
      with refactoring; 'git diff -b --patience' may help.
      
      * docs/schemas/domaincommon.rng (disk): Refactor into pieces.
      (diskSource, diskSourceFile, diskSourceBlock, diskSourceDir)
      (diskSourceVolume: New defines.
      (diskSourceNetwork): Revise scope.
      * docs/schemas/domainsnapshot.rng (disksnapshot): Adjust.
      * tests/domainsnapshotxml2xmlin/disk-seclabel-invalid.xml,
      tests/domainsnapshotxml2xmlin/disk-network-seclabel-invalid.xml: New
      tests to check seclabel is forbidden in domain snapshot by schema.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Signed-off-by: NJiri Denemark <jdenemar@redhat.com>
      fec1a939
    • E
      conf: set up for per-grammar overrides in schemas · 369cdfa8
      Eric Blake 提交于
      This patch is my first experience playing with nested grammars,
      as documented in http://relaxng.org/tutorial-20011203.html#IDA3PZR.
      I plan on doing more overrides in order to make the RelaxNG
      grammar mirror the C code refactoring into a common
      virStorageSource, but where different clients of that source do
      not support the same subset of functionality.  By starting with
      something fairly easy to validate, I can make sure my later
      patches will be possible.
      
      This patch adds a use of the no-op <ref
      name='sourceStartupPolicy'/> to the disksnapshot definition, so
      that the snapshot version of a type='file' <source> more closely
      resembles the version in domaincommon.  A future patch will merge
      the two files into using a common define, but this patch is
      sufficient for testing that adding <source
      startupPolicy='optional'/> in any of the
      tests/domainsnapshotxml2xmlin/*.xml files still gets rejected
      unless it occurs within the <domain> subelement, because the
      definition of startupPolicy is empty outside of domain.rng.
      
      * docs/schemas/storagecommon.rng (storageStartupPolicy)
      (storageSourceExtra): Create no-op defaults.
      * docs/schemas/domainsnapshot.rng (domain): Use nested grammar
      to avoid restricting <domain>.
      (storageSourceExtra): Create new override.
      (disksnapshot): Access overrides through common names.
      * docs/schemas/domaincommon.rng (disk): Access overrides through
      common names.
      * docs/schemas/domain.rng (storageStartupPolicy)
      (storageSourceExtra): Create new overrides.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Signed-off-by: NJiri Denemark <jdenemar@redhat.com>
      369cdfa8
  8. 15 4月, 2014 1 次提交
    • E
      conf: restrict external snapshots to backing store formats · db7d7c0e
      Eric Blake 提交于
      Domain snapshots should only permit an external snapshot into
      a storage format that permits a backing chain, since the new
      snapshot file necessarily must be backed by the existing file.
      The C code for the qemu driver is a little bit stricter in
      currently enforcing only qcow2 or qed, but at the XML parser
      level, including virt-xml-validate, it is fairly easy to
      enforce that a user can't request a 'raw' external snapshot.
      
      * docs/schemas/storagecommon.rng (storageFormat): Split out...
      (storageFormatBacking): ...new sublist.
      * docs/schemas/domainsnapshot.rng (disksnapshotdriver): Use new
      type.
      * src/util/virstoragefile.h (virStorageFileFormat): Rearrange for
      easier code management.
      * src/util/virstoragefile.c (virStorageFileFormat, fileTypeInfo):
      Likewise.
      * src/conf/snapshot_conf.c (virDomainSnapshotDiskDefParseXML): Use
      new marker to limit selection of formats.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Signed-off-by: NJiri Denemark <jdenemar@redhat.com>
      db7d7c0e