1. 09 5月, 2016 1 次提交
    • P
      util: Replace virDomainDiskSourceIsBlockType with a new helper · 3ec7bb35
      Peter Krempa 提交于
      For disks sources described by a libvirt volume we don't need to do a
      complicated check since virStorageTranslateDiskSourcePool already
      correctly determines the actual disk type.
      
      Replace the checks using a new accessor that does not open-code the
      whole logic.
      3ec7bb35
  2. 15 4月, 2016 1 次提交
    • O
      storage: dir: adapt .refreshVol and .refreshPool for ploop volumes · ea94be47
      Olga Krishtal 提交于
      Refreshes meta-information such as allocation, capacity, format, etc.
      Ploop volumes differ from other volume types. Path to volume is the path
      to directory with image file root.hds and DiskDescriptor.xml.
      https://openvz.org/Ploop/format
      Due to this fact, operations of opening the volume have to be done once
      again. get the information.
      
      To decide whether the given volume is ploops one, it is necessary to check
      the presence of root.hds and DiskDescriptor.xml files in volumes' directory.
      Only in this case the volume can be manipulated as the ploops one.
      Such strategy helps us to resolve problems that might occure, when we
      upload some other volume type from ploop source.
      Signed-off-by: NOlga Krishtal <okrishtal@virtuozzo.com>
      Signed-off-by: NJán Tomko <jtomko@redhat.com>
      ea94be47
  3. 15 2月, 2016 1 次提交
  4. 10 2月, 2016 1 次提交
  5. 06 1月, 2016 1 次提交
    • W
      rbd: Do not append Ceph monitor port number 6789 if not provided · 6343018f
      Wido den Hollander 提交于
      If no port number was provided for a storage pool libvirt defaults to
      port 6789; however, librbd/librados already default to 6789 when no port
      number is provided.
      
      In the future Ceph will switch to a new port for the Ceph monitors since
      port 6789 is already assigned to a different application by IANA.
      
      Port 6789 is assigned to SMC-HTTPS and Ceph now has port 3300 assigned as
      the 'Ceph monitor' port.
      
      In this case it is the best solution to not hardcode any port number into
      libvirt and let librados handle the connection.
      
      Only if a user specifies a different port number we pass it down to librados,
      otherwise we leave it blank.
      Signed-off-by: NWido den Hollander <wido@widodh.nl>
      
      merge
      6343018f
  6. 07 8月, 2015 1 次提交
  7. 27 4月, 2015 1 次提交
  8. 22 4月, 2015 3 次提交
  9. 13 4月, 2015 1 次提交
  10. 18 3月, 2015 1 次提交
    • P
      util: storage: Fix check for empty storage device · 158340e2
      Peter Krempa 提交于
      If the storage device type is parsed as network our parser still allows
      it to omit the <source> element. The empty drive check would not trigger
      on such device as it expects that every network storage source is valid.
      
      Use VIR_STORAGE_NET_PROTOCOL_NONE as a marker that the storage source is
      empty.
      158340e2
  11. 26 2月, 2015 2 次提交
  12. 25 2月, 2015 1 次提交
  13. 04 2月, 2015 1 次提交
  14. 26 1月, 2015 1 次提交
  15. 09 1月, 2015 1 次提交
    • J
      safezero: fall back to writing zeroes even when resizing · 1390c268
      Ján Tomko 提交于
      Remove the resize flag and use the same code path for all callers.
      This flag was added by commit 18f03166 to allow virStorageFileResize
      use 'safezero' while preserving the behavior.
      
      Explicitly return -2 when a fallback to a different method should
      be done, to make the code path more obvious.
      
      Fail immediately when ftruncate fails in the mmap method,
      as we did before commit 18f03166.
      1390c268
  16. 17 12月, 2014 2 次提交
    • E
      qemu: let blockinfo reuse virStorageSource · 89646e69
      Eric Blake 提交于
      Right now, grabbing blockinfo always calls stat on the disk, then
      opens the image to determine the capacity, using a throw-away
      virStorageSourcePtr.  This has a couple of drawbacks:
      
      1. We are calling stat and opening a file on every invocation of
      the API.  However, there are cases where the stats should NOT be
      changing between successive calls (if a domain is running, no
      one should be changing the physical size of a block device or raw
      image behind our backs; capacity of read-only files should not
      be changing; and we are the gateway to the block-resize command
      to know when the capacity of read-write files should be changing).
      True, we still have to use stat in some cases (a sparse raw file
      changes allocation if it is read-write and the amount of holes is
      changing, and a read-write qcow2 image stored in a file changes
      physical size if it was not fully pre-allocated).  But for
      read-only images, even this should be something we can remember
      from the previous time, rather than repeating every call.
      
      2. We want to enhance the power of virDomainListGetStats, by
      sharing code.  But we already have a virStorageSourcePtr for
      each disk, and it would be easier to reuse the common structure
      than to have to worry about the one-off virDomainBlockInfoPtr.
      
      While this patch does not optimize reuse of information in point
      1, it does get us closer to being able to do so; by updating a
      structure that survives between consecutive calls.
      
      * src/util/virstoragefile.h (_virStorageSource): Add physical, to
      mirror virDomainBlockInfo; rearrange fields to match public struct.
      (virStorageSourceCopy): Copy the new field.
      * src/qemu/qemu_driver.c (qemuDomainGetBlockInfo): Store into
      storage source, then copy to block info.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      89646e69
    • J
      virstoragefile: Have virStorageFileResize use safezero · 18f03166
      John Ferlan 提交于
      Currently virStorageFileResize() function uses build conditionals to
      choose either the posix_fallocate() or syscall(SYS_fallocate) with no
      fallback in order to preallocate the space in the newly resized file.
      
      Since the safezero code has a similar set of conditionals modify the
      resize and safezero code in order to allow the resize logic to make use
      of safezero to unify the look/feel of the code paths.
      
      Add a new boolean (resize) to safezero() to make the optional decision
      whether to try syscall(SYS_fallocate) if the posix_fallocate fails because
      HAVE_POSIX_FALLOCATE is not defined (eg, return -1 and errno == 0).
      
      Create a local safezero_sys_fallocate in order to handle the resize
      code paths that support that.  If not present, the set errno = ENOSYS
      in order to allow the caller to handle the failure scenarios.
      Signed-off-by: NJohn Ferlan <jferlan@redhat.com>
      18f03166
  17. 21 11月, 2014 7 次提交
    • P
      storage: rbd: Implement support for passing config file option · b7d1bee2
      Peter Krempa 提交于
      To be able to express some use cases of the RBD backing with libvirt, we
      need to be able to specify a config file for the RBD client to qemu as
      that is one of the commonly used options.
      b7d1bee2
    • P
      storage: rbd: qemu: Add support for specifying internal RBD snapshots · 02556606
      Peter Krempa 提交于
      Some storage systems have internal support for snapshots. Libvirt should
      be able to select a correct snapshot when starting a VM.
      
      This patch adds a XML element to select a storage source snapshot for
      the RBD protocol which supports this feature.
      02556606
    • P
      storage: Allow parsing of RBD backing strings when building backing chain · 930b7759
      Peter Krempa 提交于
      As we now have a common function to parse backing store string for RBD
      backing store we can reuse it in the backing store walker so that we
      don't fail on files backed by RBD storage.
      
      This patch also adds a few tests to verify that the parsing works as
      expected.
      930b7759
    • P
      util: storagefile: Split out parsing of NBD string into a separate func · b327df87
      Peter Krempa 提交于
      Split out the code so that the function looks homogenous after adding
      more protocol specific parsers.
      b327df87
    • P
      util: split out qemuParseRBDString into a common helper · 5604c056
      Peter Krempa 提交于
      To allow reuse this non-trivial parser code in the backing store parser
      this part of the command line parser needs to be split out into a
      separate funciton.
      5604c056
    • P
      util: storage: Copy hosts of a storage file only if they exist · c264ea58
      Peter Krempa 提交于
      If there are no hosts for a storage source virStorageSourceCopy and
      virStorageSourceNewFromBackingRelative would try to copy them anyways.
      As the success of virStorageNetHostDefCopy is determined by returning
      a pointer and malloc of 0 elements might return NULL according to the
      implementation, the result of the copy function may vary.
      
      Fix this by copying the hosts array only if there are hosts defined.
      c264ea58
    • P
      storage: qemu: Fix security labelling of new image chain elements · 7e130e8b
      Peter Krempa 提交于
      When creating a disk image snapshot the libvirt code would blindly copy
      the parents label to the newly created image. This runs into problems
      when you start a VM from an image hosted on NFS (or other storage system
      that doesn't support selinux labels) and the snapshot destination is on
      a storage system that does support selinux labels. Libvirt's code in
      that case generates a different security label for the image hosted on
      NFS. This label is valid only for NFS images and doesn't allow access in
      case of a locally stored image.
      
      To fix this issue libvirt needs to refrain from copying security
      information in cases where the default domain seclabel is a better
      choice.
      
      This patch repurposes the now unused @force argument of
      virStorageSourceInitChainElement to denote whether a copy of the
      security labelling stuff should be attempted or not. This allows to
      fine-control the copy operation for cases where we need to keep the
      label of the old disk vs. the cases where we need to keep the label
      unset to use the default domain imagelabel.
      
      Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1151718
      7e130e8b
  18. 15 11月, 2014 1 次提交
  19. 30 10月, 2014 1 次提交
    • P
      storage: Fix crash when parsing backing store URI with schema · 98784369
      Peter Krempa 提交于
      The code that parses the schema from the URI touches the "hosts[0]"
      member of the storage file source structure in case the URI contains a
      schema. The hosts array was not yet allocated at the point in the code
      where the transport protocol was parsed and set. This lead to a crash of
      libvirtd.
      
      Fix the code by allocating the "hosts" array upfront and add a test case
      to verify this scenario. (Unfortunately this requires shuffling the test
      case numbers too).
      
      Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1156288
      98784369
  20. 17 9月, 2014 1 次提交
  21. 16 9月, 2014 1 次提交
    • P
      util: storage: Fix qcow(2) header parser according to docs · 34e317cf
      Peter Krempa 提交于
      The backing store string location offset 0 determines that the file
      isn't present. The string size shouldn't be then checked:
      
      from qemu.git/docs/specs/qcow2.txt
      
      == Header ==
      
      The first cluster of a qcow2 image contains the file header:
      
      Byte  0 -  3:   magic
                      QCOW magic string ("QFI\xfb")
      
            4 -  7:   version
                      Version number (valid values are 2 and 3)
      
            8 - 15:   backing_file_offset
                      Offset into the image file at which the backing file name
                      is stored (NB: The string is not null terminated). 0 if the
                      image doesn't have a backing file.
      
           16 - 19:   backing_file_size
                      Length of the backing file name in bytes. Must not be
                      longer than 1023 bytes. Undefined if the image doesn't have
                      a backing file.         ^^^^^^^^^
      
      This patch intentionally leaves the backing file string size check in
      place in case a malformatted file would be presented to libvirt. Also
      according to the docs the string size is maximum 1023 bytes, thus this
      patch adds a check to verify that.
      
      I was also able to verify that the check was done the same way in the
      legacy qcow fromat (in qemu's code).
      34e317cf
  22. 12 9月, 2014 1 次提交
  23. 10 9月, 2014 1 次提交
  24. 08 8月, 2014 1 次提交
    • E
      blockjob: avoid memory leak during block pivot · a595a005
      Eric Blake 提交于
      Valgrind caught a memory leak:
      
      ==2018== 9 bytes in 1 blocks are definitely lost in loss record 143 of 927
      ==2018==    at 0x4A0645D: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
      ==2018==    by 0x8C42369: strdup (strdup.c:42)
      ==2018==    by 0x50EACC9: virStrdup (virstring.c:676)
      ==2018==    by 0x50E79E5: virStorageSourceCopy (virstoragefile.c:1845)
      ==2018==    by 0x20A3FAA7: qemuDomainBlockCommit (qemu_driver.c:15620)
      ==2018==    by 0x51DC6B2: virDomainBlockCommit (libvirt.c:20092)
      
      I traced it to the fact that blockcopy and blockcommit end up
      reparsing a backing chain on pivot, but the chain parsing code
      doesn't gracefully handle the case where the backing file is
      already known.
      
      I'm not exactly sure when this was introduced, but suspect that the
      refactoring in commit 9944b710 and friends that moved towards probing
      in-place rather than into a temporary structure are part of the cause.
      
      * src/util/virstoragefile.c (virStorageFileGetMetadataInternal):
      Don't leak any prior value.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      a595a005
  25. 09 7月, 2014 3 次提交
  26. 08 7月, 2014 3 次提交