1. 21 9月, 2015 1 次提交
    • J
      virfile: Rename virFileUnlink to virFileRemove · 1b046a68
      John Ferlan 提交于
      Similar to commit id '35847860', it's possible to attempt to create
      a 'netfs' directory in an NFS root-squash environment which will cause
      the 'vol-delete' command to fail.  It's also possible error paths from
      the 'vol-create' would result in an error to remove a created directory
      if the permissions were incorrect (and disallowed root access).
      
      Thus rename the virFileUnlink to be virFileRemove to match the C API
      functionality, adjust the code to following using rmdir or unlink
      depending on the path type, and then use/call it for the VIR_STORAGE_VOL_DIR
      1b046a68
  2. 18 9月, 2015 1 次提交
  3. 03 9月, 2015 1 次提交
  4. 02 9月, 2015 1 次提交
    • J
      virfile: Introduce virFileUnlink · 35847860
      John Ferlan 提交于
      In an NFS root-squashed environment the 'vol-delete' command will fail to
      'unlink' the target volume since it was created under a different uid:gid.
      
      This code continues the concepts introduced in virFileOpenForked and
      virDirCreate[NoFork] with respect to running the unlink command under
      the uid/gid of the child. Unlike the other two, don't retry on EACCES
      (that's why we're here doing this now).
      35847860
  5. 24 8月, 2015 1 次提交
  6. 19 8月, 2015 2 次提交
  7. 14 8月, 2015 2 次提交
    • E
      tools: Introduce new client generic module vsh · 834c5720
      Erik Skultety 提交于
      In order to share as much virsh' logic as possible with upcomming
      virt-admin client we need to split virsh logic into virsh specific and
      client generic features.
      
      Since majority of virsh methods should be generic enough to be used by
      other clients, it's much easier to rename virsh specific data to virshX
      than doing this vice versa. It moved generic virsh commands (including info
      and opts structures) to generic module vsh.c.
      
      Besides renaming methods and structures, this patch also involves introduction
      of a client specific control structure being referenced as private data in the
      original control structure, introduction of a new global vsh Initializer,
      which currently doesn't do much, but there is a potential for added
      functionality in the future.
      Lastly it introduced client hooks which are especially necessary during
      client connecting phase.
      834c5720
    • T
      domain_conf: Introducde virDomainObjListRenameAddNew() & virDomainObjListRenameRemove() · 28257dc2
      Tomas Meszaros 提交于
      We just need to update the entry in the second hash table. Since commit 8728a565
      we have two hash tables for the domain list so that we can do O(1) lookup
      regardless of looking up by UUID or name. Since with renaming a domain UUID does
      not change, we only need to update the second hash table, where domains are
      referenced by their name.
      
      We will call both functions from the qemuDomainRename().
      Signed-off-by: NTomas Meszaros <exo@tty.sk>
      28257dc2
  8. 10 8月, 2015 1 次提交
    • L
      conf: add new <model> subelement with name attribute to <controller> · bf202510
      Laine Stump 提交于
      This new subelement is used in PCI controllers: the toplevel
      *attribute* "model" of a controller denotes what kind of PCI
      controller is being described, e.g. a "dmi-to-pci-bridge",
      "pci-bridge", or "pci-root". But in the future there will be different
      implementations of some of those types of PCI controllers, which
      behave similarly from libvirt's point of view (and so should have the
      same model), but use a different device in qemu (and present
      themselves as a different piece of hardware in the guest). In an ideal
      world we (i.e. "I") would have thought of that back when the pci
      controllers were added, and used some sort of type/class/model
      notation (where class was used in the way we are now using model, and
      model was used for the actual manufacturer's model number of a
      particular family of PCI controller), but that opportunity is long
      past, so as an alternative, this patch allows selecting a particular
      implementation of a pci controller with the "name" attribute of the
      <model> subelement, e.g.:
      
        <controller type='pci' model='dmi-to-pci-bridge' index='1'>
          <model name='i82801b11-bridge'/>
        </controller>
      
      In this case, "dmi-to-pci-bridge" is the kind of controller (one that
      has a single PCIe port upstream, and 32 standard PCI ports downstream,
      which are not hotpluggable), and the qemu device to be used to
      implement this kind of controller is named "i82801b11-bridge".
      
      Implementing the above now will allow us in the future to add a new
      kind of dmi-to-pci-bridge that doesn't use qemu's i82801b11-bridge
      device, but instead uses something else (which doesn't yet exist, but
      qemu people have been discussing it), all without breaking existing
      configs.
      
      (note that for the existing "pci-bridge" type of PCI controller, both
      the model attribute and <model> name are 'pci-bridge'. This is just a
      coincidence, since it turns out that in this case the device name in
      qemu really is a generic 'pci-bridge' rather than being the name of
      some real-world chip)
      bf202510
  9. 07 8月, 2015 2 次提交
    • M
      numa_conf: Introduce virDomainNumaGetMaxCPUID · 8f2535de
      Michal Privoznik 提交于
      This function should return the greatest CPU number set in
      /domain/cpu/numa/cell/@cpus. The idea is that we should compare
      the returned value against /domain/vcpu value. Yes, there exist
      users who think the following is a good idea:
      
        <vcpu placement='static'>4</vcpu>
        <cpu mode='host-model'>
          <model fallback='allow'/>
          <numa>
            <cell id='0' cpus='0-1' memory='1048576' unit='KiB'/>
            <cell id='1' cpus='9-10' memory='2097152' unit='KiB'/>
          </numa>
        </cpu>
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      8f2535de
    • P
      qemu: Fix reporting of physical capacity for block devices · 8dc27259
      Peter Krempa 提交于
      Qemu reports physical size 0 for block devices. As 15fa84ac
      changed the behavior of qemuDomainGetBlockInfo to just query the monitor
      this created a regression since we didn't report the size correctly any
      more.
      
      This patch adds code to refresh the physical size of a block device by
      opening it and seeking to the end and uses it both in
      qemuDomainGetBlockInfo and also in qemuDomainGetStatsOneBlock that was
      broken since it was introduced in this respect.
      
      Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1250982
      8dc27259
  10. 03 8月, 2015 1 次提交
    • S
      nodeinfo: Fix output on PPC64 KVM hosts · 014208c4
      Shivaprasad G Bhat 提交于
      The nodeinfo is reporting incorrect number of cpus and incorrect host
      topology on PPC64 KVM hosts. The KVM hypervisor on PPC64 needs only
      the primary thread in a core to be online, and the secondaries offlined.
      While scheduling a guest in, the kvm scheduler wakes up the secondaries to
      run in guest context.
      
      The host scheduling of the guests happen at the core level(as only primary
      thread is online). The kvm scheduler exploits as many threads of the core
      as needed by guest. Further, starting POWER8, the processor allows splitting
      a physical core into multiple subcores with 2 or 4 threads each. Again, only
      the primary thread in a subcore is online in the host. The KVM-PPC
      scheduler allows guests to exploit all the offline threads in the subcore,
      by bringing them online when needed.
      (Kernel patches on split-core http://www.spinics.net/lists/kvm-ppc/msg09121.html)
      
      Recently with dynamic micro-threading changes in ppc-kvm, makes sure
      to utilize all the offline cpus across guests, and across guests with
      different cpu topologies.
      (https://www.mail-archive.com/kvm@vger.kernel.org/msg115978.html)
      
      Since the offline cpus are brought online in the guest context, it is safe
      to count them as online. Nodeinfo today discounts these offline cpus from
      cpu count/topology calclulation, and the nodeinfo output is not of any help
      and the host appears overcommited when it is actually not.
      
      The patch carefully counts those offline threads whose primary threads are
      online. The host topology displayed by the nodeinfo is also fixed when the
      host is in valid kvm state.
      Signed-off-by: NShivaprasad G Bhat <sbhat@linux.vnet.ibm.com>
      Signed-off-by: NAndrea Bolognani <abologna@redhat.com>
      014208c4
  11. 22 7月, 2015 2 次提交
  12. 20 7月, 2015 1 次提交
    • M
      qemu: Reject updating unsupported disk information · 717c99f3
      Martin Kletzander 提交于
      If one calls update-device with information that is not updatable,
      libvirt reports success even though no data were updated.  The example
      used in the bug linked below uses updating device with <boot order='2'/>
      which, in my opinion, is a valid thing to request from user's
      perspective.  Mainly since we properly error out if user wants to update
      such data on a network device for example.
      
      And since there are many things that might happen (update-device on disk
      basically knows just how to change removable media), check for what's
      changing and moreover, since the function might be usable in other
      drivers (updating only disk path is a valid possibility) let's abstract
      it for any two disks.
      
      We can't possibly check for everything since for many fields our code
      does not properly differentiate between default and unspecified values.
      Even though this could be changed, I don't feel like it's worth the
      complexity so it's not the aim of this patch.
      
      Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1007228
      717c99f3
  13. 14 7月, 2015 1 次提交
  14. 10 7月, 2015 3 次提交
  15. 23 6月, 2015 1 次提交
    • E
      json: make it easier to type-check when getting from object · 58fd6703
      Eric Blake 提交于
      While working in qemu_monitor_json, I repeatedly found myself
      getting a value then checking if it was an object.  Add some
      wrappers to make this task easier.
      
      * src/util/virjson.c (virJSONValueObjectGetByType)
      (virJSONValueObjectGetObject, virJSONValueObjectGetArray): New
      functions.
      (virJSONValueObjectGetString, virJSONValueObjectGetNumberInt)
      (virJSONValueObjectGetNumberUint)
      (virJSONValueObjectGetNumberLong)
      (virJSONValueObjectGetNumberUlong)
      (virJSONValueObjectGetNumberDouble)
      (virJSONValueObjectGetBoolean): Simplify.
      (virJSONValueIsNull): Change return type.
      * src/util/virjson.h: Reflect changes.
      * src/libvirt_private.syms (virjson.h): Export them.
      * tests/jsontest.c (testJSONLookup): New test.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      58fd6703
  16. 19 6月, 2015 2 次提交
  17. 18 6月, 2015 3 次提交
  18. 16 6月, 2015 1 次提交
  19. 12 6月, 2015 2 次提交
  20. 11 6月, 2015 1 次提交
  21. 04 6月, 2015 1 次提交
    • P
      conf: Add new helpers to resolve virDomainModificationImpact to domain defs · 3d021381
      Peter Krempa 提交于
      virDomainLiveConfigHelperMethod that is used for this job now does
      modify the flags but still requires the callers to extract the correct
      definition objects.
      
      In addition coverity and other static analyzers are usually unhappy as
      they don't grasp the fact that @flags are upadted according to the
      correct def to be present.
      
      To work this issue around and simplify the calling chain let's add a new
      helper that will work only on drivers that always copy the persistent
      def to a transient at start of a vm. This will allow to drop a few
      arguments. The new function syntax will also fill two definition
      pointers rather than modifying the @flags parameter.
      3d021381
  22. 03 6月, 2015 2 次提交
    • P
      util: bitmap: Add virBitmapToDataBuf that does not allocate the buffer · 02a6c73f
      Peter Krempa 提交于
      Since some functions can be optimized by reusing the buffers that they
      already have instead of allocating and copying new ones, lets split
      virBitmapToData to two functions where one only converts the data and
      the second one is a wrapper that allocates the buffer if necessary.
      02a6c73f
    • P
      conf: Refactor emulatorpin handling · ee3da892
      Peter Krempa 提交于
      Store the emulator pinning cpu mask as a pure virBitmap rather than the
      virDomainPinDef since it stores only the bitmap and refactor
      qemuDomainPinEmulator to do the same operations in a much saner way.
      
      As a side effect virDomainEmulatorPinAdd and virDomainEmulatorPinDel can
      be removed since they don't add any value.
      ee3da892
  23. 21 5月, 2015 1 次提交
    • J
      Add wrappers for virDomainDiskIndexBy* · 865109b3
      Jiri Denemark 提交于
      Sometimes the only thing we need is the pointer to virDomainDiskDef and
      having to call virDomainDiskIndexBy* APIs, storing the disk index, and
      looking it up in the disks array is ugly. After this patch, we can just
      call virDomainDiskBy* and get the pointer in one step.
      Signed-off-by: NJiri Denemark <jdenemar@redhat.com>
      865109b3
  24. 18 5月, 2015 1 次提交
  25. 16 5月, 2015 1 次提交
  26. 15 5月, 2015 1 次提交
  27. 14 5月, 2015 1 次提交
  28. 11 5月, 2015 2 次提交
    • P
      conf: Add helper to convert list of virDomains to a list of virDomainObjs · 83726a14
      Peter Krempa 提交于
      Add virDomainObjListConvert that will take a list of virDomains, apply
      filters and return a list of virDomainObjs.
      83726a14
    • P
      conf: Refactor domain list collection critical section · cbe7bbf7
      Peter Krempa 提交于
      Until now the virDomainListAllDomains API would lock the domain list and
      then every single domain object to access and filter it. This would
      potentially allow a unresponsive VM to block the whole daemon if a
      *listAllDomains call would get stuck.
      
      To avoid this problem this patch collects a list of referenced domain
      objects first from the list and then unlocks it right away. The
      expensive operation requiring locking of the domain object is executed
      after the list lock is dropped. While a single blocked domain will still
      lock up a listAllDomains call, the domain list won't be held locked and
      thus other APIs won't be blocked.
      
      Additionally this patch also fixes the lookup code, where we'd ignore
      the vm->removing flag and thus potentially return domain objects that
      would be deleted very soon so calling any API wouldn't make sense.
      
      As other clients also could benefit from operating on a list of domain
      objects rather than the public domain descriptors a new intermediate
      API - virDomainObjListCollect - is introduced by this patch.
      
      Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1181074
      cbe7bbf7