1. 26 1月, 2017 2 次提交
    • J
      storage: Create common file/dir pool backend helpers · 5f07c3c0
      John Ferlan 提交于
      Move some pool functions to storage_util to create local/common helpers
      using the same naming syntax as the existing upload, download, and wipe
      virStorageBackend*Local API's.
      
      In the process of doing so, found a few API's that can now become local
      to storage_util. In order to distinguish between local/external - I
      changed the names of the now local only ones from "virStorageBackend..."
      to just "storageBackend..."
      Signed-off-by: NJohn Ferlan <jferlan@redhat.com>
      5f07c3c0
    • J
      storage: Move the virStorageBackendFileSystem{Start|Stop} API's · e26c2162
      John Ferlan 提交于
      Just moving code around with minor adjustment to have the Stop
      code combine with the Unmount code since all the Stop code did
      was call the Unmount code.
      e26c2162
  2. 19 1月, 2017 7 次提交
  3. 18 1月, 2017 6 次提交
    • J
      disk: Fixup error handling path for devmapper when part_separator='yes' · 0d157b3f
      John Ferlan 提交于
      https://bugzilla.redhat.com/show_bug.cgi?id=1346566
      
      If libvirt_parthelper is erroneously told to append the partition
      separator 'p' onto the generated output for a disk pool using device
      mapper that has 'user_friendly_names' set to true, then the error
      recovery path will fail to find volume resulting in the pool being
      in an unusable state.
      
      So, augment the documentation to provide the better hint that the
      part_separator='yes' should be set when user_friendly_names are not
      being used. Additionally, once we're in the error path where the
      returned name doesn't match the expected partition name try to see
      if the reason is because the 'p' was erroneosly added. If so alter
      the about to be removed vol->target.path so that the DiskDeleteVol
      code can find the partition that was created and remove it.
      0d157b3f
    • J
      storage: Allow probe of volume capacity for BLOCK type · 9508682b
      John Ferlan 提交于
      If the voldef type is VIR_STORAGE_VOL_BLOCK, then as long as the
      format is known, let's allow the probe to happen - gets a truer value
      and the same probe/update would be allowed for the same volume defined
      in a domain.
      9508682b
    • J
      storage: Fix virStorageBackendUpdateVolTargetInfo type check · d04bb05f
      John Ferlan 提交于
      For volume processing in virStorageBackendUpdateVolTargetInfo to get
      the capacity commit id 'a760ba3a' added the ability to probe a volume
      that didn't list a target format. Unfortunately, the code used the
      virStorageSource  (e.g. target->type - virStorageType) rather than
      virStorageVolDef (e.g. vol->type - virStorageVolType) in order to
      make the comparison. As it turns out target->type for a volume is
      not filled in at all for a voldef as the code relies on vol->type.
      Ironically the result is that only VIR_STORAGE_VOL_BLOCK's would get
      their capacity updated.
      
      This patch will adjust the code to check the "vol->type" field instead
      as an argument. This way for a voldef, the correct comparison is made.
      
      Additionally for a backingStore, the 'type' field is never filled in;
      however, since we know that the provided path is a location at which
      the backing store can be accessed on the local filesystem thus just
      pass VIR_STORAGE_VOL_FILE in order to satisfy the adjusted voltype
      check. Whether it's a FILE or a BLOCK only matters if we're trying to
      get more data based on the target->format.
      d04bb05f
    • P
      storage: gluster: Remove build-time dependency on the 'gluster' cli tool · 9e97c8c0
      Peter Krempa 提交于
      The tool is used for pool discovery. Since we call an external binary we
      don't really need to compile out the code that uses it. We can check
      whether it exists at runtime.
      9e97c8c0
    • P
      storage: gluster: Report error if no volumes were found in pool lookup · ce5055d7
      Peter Krempa 提交于
      Similarly to the 'netfs' pool, return an error if the host does not have
      any volumes.
      ce5055d7
    • P
      storage: Fix error reporting when looking up storage pool sources · 7bdb4b8f
      Peter Krempa 提交于
      In commit 4090e153 we went back from reporting no errors if no storage
      pools were found on a given host to reporting a bad error. And only in
      cases when gluster was not installed.
      
      Report a less bad error in case there are no volumes. Also report the
      error when gluster is installed but no volumes were found, since
      virStorageBackendFindGlusterPoolSources would return success in that
      case.
      7bdb4b8f
  4. 14 1月, 2017 3 次提交
    • J
      storage: Alter error message in probe/empty checks · 40ec4ff6
      John Ferlan 提交于
      For case VIR_STORAGE_BLKID_PROBE_DIFFERENT, clean up the message to
      avoid using the virsh like --overwrite syntax. Additionally provide
      a different error message when not writing the label to avoid confusion.
      40ec4ff6
    • J
      storage: Clean up return value checking · f462f9ad
      John Ferlan 提交于
      Rather than special casing the VIR_STORAGE_BLKID_PROBE_UNKNOWN after
      calling virStorageBackendBLKIDFindPart, just allow the switch statement
      handle setting ret = -2.
      f462f9ad
    • J
      storage: Alter logic when both BLKID and PARTED unavailable · d1f5dfc4
      John Ferlan 提交于
      If neither BLKID or PARTED is available and we're not writing, then
      just return 0 which allows the underlying storage pool to generate
      a failure. If both are unavailable and we're writing, then generate
      a more generic error message.
      d1f5dfc4
  5. 13 1月, 2017 2 次提交
    • P
      Revert "storage: Validate the device formats at logical startup" · a80957c5
      Peter Krempa 提交于
      The check is pointless since LVM is capable to detect it's own members
      and the check is flawed as it would fail if neither libblkid nor parted
      is installed.
      
      We don't really need to babysit LVM in this way.
      
      This reverts commit cb38b6cb.
      a80957c5
    • P
      Revert "storage: For FS pool check for properly formatted target volume" · 9538dff9
      Peter Krempa 提交于
      The check does not work properly (crashes) with netfs filesystems and
      also checking that a device is not empty when attempting to mount a
      filesystem is not very usefull since the mount will fail anyways.
      
      As the code would improve only a very minor corner case I don't really
      see a reason to have this code at all.
      
      This code would also fail if libvirt is compiled without support for
      blkid and without parted.
      
      This reverts commit a11fd697.
      9538dff9
  6. 10 1月, 2017 13 次提交
    • J
      storage: Fix storage_backend probing when PARTED not installed. · bdd371c5
      John Ferlan 提交于
      Commit id 'a48c674f' caused problems for systems without PARTED installed.
      
      So move the PARTED probing code back to storage_backend_disk.c and create
      a shim within storage_backend.c to call it if WITH_STORAGE_DISK is true;
      otherwise, just return -1 with the error.
      bdd371c5
    • J
      storage: Validate the device formats at logical startup · cb38b6cb
      John Ferlan 提交于
      At startup time, rather than blindly trusting the target devices are
      still properly formatted, let's check to make sure the pool's target
      devices are all properly formatted before attempting to start the pool.
      Signed-off-by: NJohn Ferlan <jferlan@redhat.com>
      cb38b6cb
    • J
      storage: Add overwrite flag checking for logical pool · f573f84e
      John Ferlan 提交于
      https://bugzilla.redhat.com/show_bug.cgi?id=1373711
      
      Add support and documentation for the [NO_]OVERWRITE flags for the
      logical backend.
      
      Update virsh.pod with a description of the process for usage of
      the flags and building of the pool's volume group.
      Signed-off-by: NJohn Ferlan <jferlan@redhat.com>
      f573f84e
    • J
      storage: Extract logical device initialize into a helper · d5cc5f89
      John Ferlan 提交于
      Make the remaining code a bit cleaner.
      Signed-off-by: NJohn Ferlan <jferlan@redhat.com>
      d5cc5f89
    • J
      storage: Clean up logical pool devices on build failure · 71a08b5a
      John Ferlan 提交于
      If the build fails, then we need to ensure that we've run pvremove
      on any devices which we've run pvcreate on; otherwise, a subsequent
      build could fail since running pvcreate twice on a device requires
      special force arguments.
      Signed-off-by: NJohn Ferlan <jferlan@redhat.com>
      71a08b5a
    • J
      storage: Adjust disk label found to match labels · a4cb4a74
      John Ferlan 提交于
      Currently as long as the disk is formatted using a known parted format
      type, the algorithm is happy to continue. However, that leaves a scenario
      whereby a disk formatted using "pc98" could be used by a pool that's defined
      using "dvh" (or vice versa). Alter the check to be match and different
      and adjust the caller.
      Signed-off-by: NJohn Ferlan <jferlan@redhat.com>
      a4cb4a74
    • J
      storage: Move and rename disk backend label checking · a48c674f
      John Ferlan 提交于
      Rather than have the Disk code having to use PARTED to determine if
      there's something on the device, let's use the virStorageBackendDeviceProbe.
      and only fallback to the PARTED probing if the BLKID code isn't built in.
      
      This will also provide a mechanism for the other current caller (File
      System Backend) to utilize a PARTED parsing algorithm in the event that
      BLKID isn't built in to at least see if *something* exists on the disk
      before blindly trying to use. The PARTED error checking will not find
      file system types, but if there is a partition table set on the device,
      it will at least cause a failure.
      
      Move virStorageBackendDiskValidLabel and virStorageBackendDiskFindLabel
      to storage_backend and rename/rework the code to fit the new model.
      
      Update the virsh.pod description to provide a more generic description
      of the process since we could now use either blkid or parted to find
      data on the target device.
      Signed-off-by: NJohn Ferlan <jferlan@redhat.com>
      a48c674f
    • J
      storage: For FS pool check for properly formatted target volume · a11fd697
      John Ferlan 提交于
      Prior to starting up, let's be sure the target volume device is
      formatted as we expect; otherwise, inhibit the start.
      Signed-off-by: NJohn Ferlan <jferlan@redhat.com>
      a11fd697
    • J
      storage: Add writelabel bool for virStorageBackendDeviceProbe · 19ced38f
      John Ferlan 提交于
      It's possible that the API could be called from a startup path in
      order to check whether the label on the device matches what our
      format is. In order to handle that condition, add a 'writelabel'
      boolean to the API in order to indicate whether a write or just
      read is about to happen.
      
      This alters two "error" conditions that would care about knowing.
      Signed-off-by: NJohn Ferlan <jferlan@redhat.com>
      19ced38f
    • J
      storage: Add partition type checks for BLKID probing · a22e1a00
      John Ferlan 提交于
      A device may be formatted using some sort of disk partition format type.
      We can check that using the blkid_ API's as well - so alter the logic to
      allow checking the device for both a filesystem and a disk partition.
      Signed-off-by: NJohn Ferlan <jferlan@redhat.com>
      a22e1a00
    • J
      storage: Fix implementation of no-overwrite for file system backend · f23d4bbc
      John Ferlan 提交于
      https://bugzilla.redhat.com/show_bug.cgi?id=1363586
      
      Commit id '27758859' introduced the "NO_OVERWRITE" flag check for
      file system backends; however, the implementation, documentation,
      and algorithm was inconsistent. For the "flag" description for the
      API the flag was described as "Do not overwrite existing pool";
      however, within the storage backend code the flag is described
      as "it probes to determine if filesystem already exists on the
      target device, renurning an error if exists".
      
      The code itself was implemented using the paradigm to set up the
      superblock probe by creating a filter that would cause the code
      to only search for the provided format type. If that type wasn't
      found, then the algorithm would return success allowing the caller
      to format the device. If the format type already existed on the
      device, then the code would fail indicating that the a filesystem
      of the same type existed on the device.
      
      The result is that if someone had a file system of one type on the
      device, it was possible to overwrite it if a different format type
      was specified in updated XML effectively trashing whatever was on
      the device already.
      
      This patch alters what NO_OVERWRITE does for a file system backend
      to be more realistic and consistent with what should be expected when
      the caller requests to not overwrite the data on the disk.
      
      Rather than filter results based on the expected format type, the
      code will allow success/failure be determined solely on whether the
      blkid_do_probe calls finds some known format on the device. This
      adjustment also allows removal of the virStoragePoolProbeResult
      enum that was under utilized.
      
      If it does find a formatted file system different errors will be
      generated indicating a file system of a specific type already exists
      or a file system of some other type already exists.
      
      In the original virsh support commit id 'ddcd5674', the description
      for '--no-overwrite' within the 'pool-build' command help output
      has an ambiguous "of this type" included in the short description.
      Compared to the longer description within the "Build a given pool."
      section of the virsh.pod file it's more apparent that the meaning
      of this flag would cause failure if a probe of the target already
      has a filesystem.
      
      So this patch also modifies the short description to just be the
      antecedent of the 'overwrite' flag, which matches the API description.
      This patch also modifies the grammar in virsh.pod for no-overwrite
      as well as reworking the paragraph formats to make it easier to read.
      Signed-off-by: NJohn Ferlan <jferlan@redhat.com>
      f23d4bbc
    • J
      storage: Introduce virStorageBackendDeviceIsEmpty · 553d21da
      John Ferlan 提交于
      Rename virStorageBackendFileSystemProbe and to virStorageBackendBLKIDFindFS
      and move to the more common storage_backend module.
      
      Create a shim virStorageBackendDeviceIsEmpty which will make the call
      to the virStorageBackendBLKIDFindFS and check the return value.
      Signed-off-by: NJohn Ferlan <jferlan@redhat.com>
      553d21da
    • M
      security_dac: Resolve virSecurityDACSetOwnershipInternal const correctness · 39779eb1
      Michal Privoznik 提交于
      The code at the very bottom of the DAC secdriver that calls
      chown() should be fine with read-only data. If something needs to
      be prepared it should have been done beforehand.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      39779eb1
  7. 09 1月, 2017 1 次提交
  8. 07 1月, 2017 1 次提交
  9. 05 1月, 2017 3 次提交
  10. 21 12月, 2016 1 次提交
    • J
      storage: Introduce virStorageVolInfoFlags · 0c234889
      John Ferlan 提交于
      https://bugzilla.redhat.com/show_bug.cgi?id=1332019
      
      This function will essentially be a wrapper to virStorageVolInfo in order
      to provide a mechanism to have the "physical" size of the volume returned
      instead of the "allocation" size. This will provide similar capabilities to
      the virDomainBlockInfo which can return both allocation and physical of a
      domain storage volume.
      
      NB: Since we're reusing the _virStorageVolInfo and not creating a new
      _virStorageVolInfoFlags structure, we'll need to generate the rpc APIs
      remoteStorageVolGetInfoFlags and remoteDispatchStorageVolGetInfoFlags
      (although both were originally created from gendispatch.pl and then
      just copied into daemon/remote.c and src/remote/remote_driver.c).
      
      The new API will allow the usage of a VIR_STORAGE_VOL_GET_PHYSICAL flag
      and will make the decision to return the physical or allocation value
      into the allocation field.
      
      In order to get that physical value, virStorageBackendUpdateVolTargetInfoFD
      adds logic to fill in physical value matching logic in qemuStorageLimitsRefresh
      used by virDomainBlockInfo when the domain is inactive.
      Signed-off-by: NJohn Ferlan <jferlan@redhat.com>
      0c234889
  11. 13 12月, 2016 1 次提交
    • J
      util: Introduce virStorageSourceUpdateCapacity · 9d734b60
      John Ferlan 提交于
      Instead of having duplicated code in qemuStorageLimitsRefresh and
      virStorageBackendUpdateVolTargetInfo to get capacity specific data
      about the storage backing source or volume -- create a common API
      to handle the details for both.
      
      As a side effect, virStorageFileProbeFormatFromBuf returns to being
      a local/static helper to virstoragefile.c
      
      For the QEMU code - if the probe is done, then the format is saved so
      as to avoid future such probes.
      
      For the storage backend code, there is no need to deal with the probe
      since we cannot call the new API if target->format == NONE.
      Signed-off-by: NJohn Ferlan <jferlan@redhat.com>
      9d734b60