1. 30 10月, 2014 4 次提交
    • C
    • E
      qemu: better error message when block job can't succeed · 00331bfb
      Eric Blake 提交于
      https://bugzilla.redhat.com/show_bug.cgi?id=1140981 reports that
      the qemu-kvm shipped as part of RHEL 7.0 intentionally[1] cripples
      block jobs by removing the 'block-stream' QMP command, while still
      leaving 'block-job-cancel' as an unusable no-op.  Meanwhile, we
      already had existing code that checked whether block jobs were
      completely missing (such as qemu 0.15), old style (cancel is
      synchronous, and all commands spelled with '_'), or new style
      (cancel is asynchronous, and all commands spelled with '-'), and
      used that three-way probe to give decent error messages.  At the
      time that code was added, all existing qemu versions fell in one
      of three buckets, and the code was using the presence of
      'block-job-cancel' as the witness of which of the three buckets.
      But now that RHEL qemu has shipped with intentionally crippled
      'block-stream', we have a fourth bucket, which results in ugly
      error messages when trying 'virsh blockpull':
      
       error: Requested operation is not valid: Command 'block-stream' is not found
      
      In reality, the fourth bucket should be treated the same as the
      first bucket (no block job support); we can do that by realizing
      that no existing build of qemu has working block-stream while
      lacking block-job-cancel, so it is easiest to change our witness
      to the command that starts a job rather than ends one.  We still
      act correctly regarding command spelling and whether cancel is
      asynchronous.  And on crippled RHEL builds, we now get the desired:
      
       error: unsupported configuration: block jobs not supported with this qemu binary
      
      [1] The intentional cripple is limited to qemu-kvm of RHEL; when using
      qemu-kvm-rhev of RHEV, block job functionality is supported.  Don't ask
      me to explain the "why" behind it all - I'm just dealing with fallout
      from someone else's decision.
      
      * src/qemu/qemu_capabilities.h (QEMU_CAPS_BLOCKJOB_SYNC): Tweak comment.
      * src/qemu/qemu_capabilities.c (virQEMUCapsCommands): Look for stream
      rather than cancel when determining the flavor of block jobs supported.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      00331bfb
    • P
      test: Add test to verify helpers used for backing file name parsing · 95a56835
      Peter Krempa 提交于
      Add two test cases to verify that the helpers split and parse the
      backing store components properly.
      95a56835
    • 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
  2. 29 10月, 2014 36 次提交
    • E
      maint: add syntax check to prohibit static zero init · 85f2d0dd
      Eric Blake 提交于
      Now that all offenders have been cleaned, turn on a syntax-check
      rule to prevent future offenders.
      
      * cfg.mk (sc_prohibit_static_zero_init): New rule.
      * src/qemu/qemu_driver.c (qemuDomainBlockJobImpl): Avoid false
      positive.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      85f2d0dd
    • E
      maint: avoid static zero init in drivers · ec81cf89
      Eric Blake 提交于
      C guarantees that static variables are zero-initialized.  Some older
      compilers (and also gcc -fno-zero-initialized-in-bss) create larger
      binaries if you explicitly zero-initialize a static variable.
      
      * src/libxl/libxl_driver.c: Fix initialization.
      * src/lxc/lxc_controller.c: Likewise.
      * src/openvz/openvz_util.c (openvzKBPerPages): Likewise.
      * src/phyp/phyp_driver.c: Likewise.
      * src/remote/remote_driver.c: Likewise.
      * src/test/test_driver.c: Likewise.
      * src/uml/uml_driver.c: Likewise.
      * src/vbox/vbox_XPCOMCGlue.c: Likewise.
      * src/vbox/vbox_tmpl.c: Likewise.
      * src/xen/xen_driver.c: Likewise.
      * src/xen/xen_hypervisor.c: Likewise.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      ec81cf89
    • E
      maint: avoid static zero init in helpers · ff99c791
      Eric Blake 提交于
      C guarantees that static variables are zero-initialized.  Some older
      compilers (and also gcc -fno-zero-initialized-in-bss) create larger
      binaries if you explicitly zero-initialize a static variable.
      
      * src/conf/nwfilter_conf.c: Fix initialization.
      * src/cpu/cpu_x86.c: Likewise.
      * src/interface/interface_backend_netcf.c: Likewise.
      * src/locking/lock_daemon.c: Likewise.
      * src/locking/lock_driver_lockd.c: Likewise.
      * src/locking/lock_driver_sanlock.c: Likewise.
      * src/network/bridge_driver.c: Likewise.
      * src/node_device/node_device_udev.c: Likewise.
      * src/nwfilter/nwfilter_learnipaddr.c: Likewise.
      * src/rpc/virnetserver.c: Likewise.
      * src/security/security_selinux.c
      (virSecuritySELinuxGenSecurityLabel): Likewise.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      ff99c791
    • E
      maint: avoid static zero init in tests · a396c11e
      Eric Blake 提交于
      C guarantees that static variables are zero-initialized.  Some older
      compilers (and also gcc -fno-zero-initialized-in-bss) create larger
      binaries if you explicitly zero-initialize a static variable.
      
      * tests/eventtest.c: Fix initialization.
      * tests/testutils.c: Likewise.
      * tests/virhostdevtest.c: Likewise.
      * tests/virportallocatortest.c: Likewise.
      * tests/virscsitest.c: Likewise.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      a396c11e
    • E
      maint: avoid static zero init in tools · 05853324
      Eric Blake 提交于
      C guarantees that static variables are zero-initialized.  Some older
      compilers (and also gcc -fno-zero-initialized-in-bss) create larger
      binaries if you explicitly zero-initialize a static variable.
      
      * tools/virsh-console.c (got_signal): Drop unused variable.
      * tools/virsh-domain.c: Fix initialization.
      * tools/virsh.c: Likewise.
      * tools/virt-host-validate-common.c (virHostMsgWantEscape):
      Likewise.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      05853324
    • E
      maint: avoid static zero init in core files · 39871fce
      Eric Blake 提交于
      C guarantees that static variables are zero-initialized.  Some older
      compilers (and also gcc -fno-zero-initialized-in-bss) create larger
      binaries if you explicitly zero-initialize a static variable.
      
      * src/libvirt.c: Fix initialization.
      * src/util/viralloc.c: Likewise.
      * src/util/virdbus.c: Likewise.
      * src/util/virevent.c: Likewise.
      * src/util/virfile.c (safezero): Likewise.
      * src/util/virlog.c: Likewise.
      * src/util/virnetlink.c: Likewise.
      * src/util/virthread.h (VIR_ONCE_GLOBAL_INIT): Likewise.
      * src/util/virprocess.c (virProcessGetStartTime): Likewise.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      39871fce
    • E
      audit: use bool for audit log choice · 0fe384f3
      Eric Blake 提交于
      We weren't ever using the value for anything other than being non-zero.
      
      * src/util/viraudit.h (virAuditLog): Change signature.
      * src/util/viraudit.c (virAuditLog): Update user.
      * daemon/libvirtd.c (main): Likewise.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      0fe384f3
    • M
      src/Makefile.am: Add forgotten backslash · 233ecdea
      Michal Privoznik 提交于
      As I've pushed 5892944f I haven't noticed one small nitpick.
      There was this backslash missing on the line 1231 in the
      enumeration of libraries to be added to vbox storage driver. This
      resulted in nondeterministic build which sometimes succeeded and
      sometimes failed.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      233ecdea
    • J
      storage_conf: Resolve libvirtd crash matching scsi_host · 3f99d64d
      John Ferlan 提交于
      https://bugzilla.redhat.com/show_bug.cgi?id=1146837
      
      Resolve a crash in libvirtd resulting from commit id 'a4bd62ad' (1.0.6)
      which added parentaddr and unique_id to allow unique identification of
      a scsi_host, but assumed that all the pool entries and the incoming
      definition would be similarly defined. If the existing pool uses the
      'name' attribute and an incoming pool is using the parentaddr/unique_id,
      then the code will attempt to compare the existing name string against
      the incoming name string which doesn't exist (is NULL) and results in
      a core (STREQ).
      
      Conversely, if the existing pool used the parentaddr/unique_id and the
      to be defined pool used the name, then the comparison would be against
      the parentaddr, but since the incoming pool doesn't have one - that would
      leave the comparison against a parentaddr of all 0's and a unique_id of 0,
      which will always comparison to fail. This means someone could define the
      same source adapter for two pools
      
      In order to resolve this, adjust the code to get the 'host#' to be used
      by the storage scsi backend in order to check/start the pool and make sure
      the incoming definition doesn't match any of the existing pool defs.
      3f99d64d
    • J
      virutil: Introduce virGetSCSIHostNameByParentaddr · beff5d4e
      John Ferlan 提交于
      Create the function from the code in getAdapterName() in order to return
      the "host#" name for the provided parentaddr values.
      beff5d4e
    • J
      virutil: Introduce virGetSCSIHostNumber · 55f43959
      John Ferlan 提交于
      Create/use virGetSCSIHostNumber to replace the static getHostNumber
      
      Removed the "if (result &&" since result is now required to be non NULL
      on input.
      55f43959
    • J
      qemu-attach: Assign device aliases · e3a52afc
      John Ferlan 提交于
      https://bugzilla.redhat.com/show_bug.cgi?id=1141621
      
      As part of attach processing, assign the device aliases by calling
      qemuAssignDeviceAliases during qemuDomainQemuAttach once all the devices
      are found after the qemuParseCommandLinePid processing.
      
      This will alleviate a symptom that caused a libvirtd crash during an
      attempted device detach.
      e3a52afc
    • J
      hotplug: Check for alias in net detach · 96af61dd
      John Ferlan 提交于
      https://bugzilla.redhat.com/show_bug.cgi?id=1141621
      
      If the QEMU_CAPS_DEVICE is set, then ensure the host device alias has
      been properly set before making the calls to detach the device
      96af61dd
    • J
      hotplug: Check for alias in chrdev detach · 4d8a4165
      John Ferlan 提交于
      If the QEMU_CAPS_DEVICE is set, then ensure the chr device alias has
      been properly set before making the calls to detach the device
      4d8a4165
    • J
      hotplug: Check for alias in hostdev detach · 9de26f27
      John Ferlan 提交于
      If the QEMU_CAPS_DEVICE is set, then ensure the host device alias has
      been properly set before making the calls to detach the device
      9de26f27
    • J
      hotplug: Check for alias in disk detach · 5d02a9a0
      John Ferlan 提交于
      If the QEMU_CAPS_DEVICE is set, then ensure the disk device alias has
      been properly set in prior to making the calls to detach the device.
      5d02a9a0
    • J
      hotplug: Check for alias in controller detach · 65be7572
      John Ferlan 提交于
      In qemuDomainDetachControllerDevice if the info.alias already exists
      a call to qemuAssignDeviceControllerAlias would overwrite the existing
      so avoid this possibility.
      65be7572
    • J
      virsh: Adjust the text in man page regarding qemu-attach · c4056d2b
      John Ferlan 提交于
      Slight adjustment to the qemu-attach man page to note device hotplug
      and hot unplug may not work and that the environment should be considered
      read-only
      c4056d2b
    • J
      remote: fix jump depends on uninitialised value · 28b7601d
      Jincheng Miao 提交于
      Currently remote driver only initializes partial fields of
      remote_connect_get_all_domain_stats_args. But xdr_array()
      will check the uninitialised field 'doms_val'.
      For safty reason, memset all fields of args is better.
      
      Fix the following error from valgrind, like:
      ==30515== 1 errors in context 1 of 3:
      ==30515== Conditional jump or move depends on uninitialised value(s)
      ==30515==    at 0x85E9402: xdr_array (xdr_array.c:88)
      ==30515==    by 0x4FD8FC9: xdr_remote_connect_get_all_domain_stats_args (remote_protocol.c:6473)
      ==30515==    by 0x4FE72F2: virNetMessageEncodePayload (virnetmessage.c:350)
      ==30515==    by 0x4FDD21C: virNetClientProgramCall (virnetclientprogram.c:326)
      ==30515==    by 0x4FB4D01: callFull.isra.2 (remote_driver.c:6667)
      ==30515==    by 0x4FCBD45: call (remote_driver.c:6689)
      ==30515==    by 0x4FCBD45: remoteConnectGetAllDomainStats (remote_driver.c:7793)
      ==30515==    by 0x4FA0E75: virConnectGetAllDomainStats (libvirt.c:21678)
      ==30515==    by 0x147FD1: cmdDomstats (virsh-domain-monitor.c:2148)
      ==30515==    by 0x13006B: vshCommandRun (virsh.c:1915)
      ==30515==    by 0x12A9E1: main (virsh.c:3699)
      Signed-off-by: NJincheng Miao <jmiao@redhat.com>
      28b7601d
    • T
      vbox: Remove unused things in vbox_tmpl.c · 2f055b00
      Taowei Luo 提交于
      After rewriting the whole driver, Only version specified code is
      remained in vbox_tmpl.c. So, this patch removes those unused macros
      header files in vbox_tmpl.c.
      2f055b00
    • T
      vbox: New storage driver · 5892944f
      Taowei Luo 提交于
      This patch provides the new stroage driver for vbox. The work
      is similar with patch 87dea4fc and the next b4022de3.
      5892944f
    • T
      vbox: Rewrite vboxStorageVolGetPath · 013aa081
      Taowei Luo 提交于
      013aa081
    • T
      vbox: Rewrite vboxStorageVolGetXMLDesc · 4df7b206
      Taowei Luo 提交于
      4df7b206
    • T
      vbox: Rewrite vboxStorageVolGetInfo · 80f35e6e
      Taowei Luo 提交于
      80f35e6e
    • T
      vbox: Rewrite vboxStorageVolDelete · 1c2c3906
      Taowei Luo 提交于
      The API on IHardDiskAttachment is merged into IMediumAttachment.
      So, we don't need it anymore.
      1c2c3906
    • T
      vbox: Make IMediumAttachment work with vbox2.2 and 3.0 · 3d33e388
      Taowei Luo 提交于
      The GetMedium will always return a IHardDisk object them.
      In 2.2 and 3.0, it is what GetHardDisk exactly do. In 3.1 and later,
      The IMedium is same as IHardDisk.
      3d33e388
    • T
      vbox: Rewrite vboxStorageVolCreateXML · 0cd409cd
      Taowei Luo 提交于
      If the <path> in target element is not given, libvirt will put the
      new volume in ~/.VirtualBox by default.
      0cd409cd
    • T
      vbox: Make CreateHardDisk support all vbox versions · 382e655d
      Taowei Luo 提交于
      The CreateHardDiskMedium only support create HardDisk for medium
      type, and it only works when vbox version >= 3.1. This patch make
      the function workable with all vbox versions and rename it as
      CreateHardDisk.
      
      In vbox 2.2 and 3.0 this function will create a IHardDisk object.
      In vbox later than 3.0, this function will create a IMedium object.
      382e655d
    • T
      vbox: Rewrite vboxStorageVolLookupByPath · fc41e003
      Taowei Luo 提交于
      fc41e003
    • T
      vbox: Make FindMedium support old vbox versions · 1599319c
      Taowei Luo 提交于
      In old version, function FindMedium in UIVirtualBox doesn't work
      for vbox2.2 and 3.0. We assume it will not be used when vbox in
      these versions.
      
      But when rewriting vboxStorageVolLookupByPath, we found it was
      compatibe to use FindMedium to get a IHardDisk object, even in
      vbox old versions. To achieve this, first make FindMedium call
      FindHardDisk when VBOX_API_VERSION < 4000000.
      Then change the argument type **IMedium to **IHardDisk. (As the
      rules in heriachy, we can't transfer a IHardDisk to match
      IMedium in output)
      
      In vbox 2.2 and 3.0, the caller must be aware that they will get
      a IHardDisk object in return.
      1599319c
    • T
      vbox: Rewrite vboxStorageVolLookupByKey · f67ae174
      Taowei Luo 提交于
      f67ae174
    • T
      vbox: Rewrite vboxStorageVolLookupByName · 8a8fa504
      Taowei Luo 提交于
      8a8fa504
    • T
      vbox: Rewrite vboxStoragePoolListVolumes · c3c8cd4f
      Taowei Luo 提交于
      c3c8cd4f
    • T
      vbox: Rewrite vboxStoragePoolNumOfVolumes · ce381d37
      Taowei Luo 提交于
      We use typedef IMedium IHardDisk to make IHardDisk hierachy from
      IMedium (Actually it did on vbox 2.2 and 3.0's C++ API).
      So when calling
          VBOX_MEDIUM_FUNC_ARG*(IHardDisk, func, args)
      we can directly replace it to
          gVBoxAPI.UIMedium.func(IHardDisk, args)
      
      When dealing with this two types, we get some rules from it's
      hierachy relationship.
      
      When using IHardDisk and IMedium as input, we can't transfer a
      IMedium to IHardDisk. Like:
          gVBoxAPI.UIHardDisk.func(IHardDisk *hardDisk, args)
          Here, we can't put a *IMedium as a argument.
      
      When using IHardDisk and IMedium as output, we can't transfer a
      IHardDisk to IMedium. Like:
          gVBoxAPI.UIMachine.GetMedium(IMedium **out)
          Here, we can't put a **IHardDisk as a argument. If this case
          do happen, we either change the API to GetHardDisk or write a
          new one.
      ce381d37
    • T
      vbox: Rewrite vbox-independent functions · 459886d4
      Taowei Luo 提交于
      This patch rewrites the following functions
          *vboxStorageOpen
          *vboxStorageClose
          *vboxConnectNumOfStoragePools
          *vboxConnectListStoragePools
          *vboxStoragePoolLookupByName
      
      These functions do not call any vbox API, so I directly move it
      from vbox_tmpl.c to vbox_storage.c
      
      A small improvement is made on vboxConnectListStoragePools.
      The if condition nnames == 1 is modified to nnames > 0. So if the
      caller put more than one slot to get active storage pools, the new
      function will return exactly one, while the old one would only
      return 0.
      459886d4
    • T
      vbox: move common codes to vbox_common.h · 7d5b9419
      Taowei Luo 提交于
      There are lots of macro declarations in vbox_common.c,
      vbox_network.c, and the coming vbox_storage.c which simply the API
      calling. Since they are totally the same. We shouldn't keep three
      copies of that, so they are moved to vbox_common.h.
      
      Note: The macros are quite different from those in vbox_tmpl.c,
            because they are using different API.
      7d5b9419