1. 29 10月, 2015 4 次提交
    • R
      Fix virNetDevWaitDadFinish stub · 2589ca30
      Roman Bogorodskiy 提交于
      Build on non-Linux fails because the virNetDevWaitDadFinish() stub
      has unused parameters. Fix by adding appropriate ATTRIBUTE_UNUSED
      for these parameters.
      
      Pushing under build-breaker rule.
      2589ca30
    • M
      network: wait for DAD to finish for bridge IPv6 addresses · 0f7436ca
      Maxim Perevedentsev 提交于
      commit db488c79 assumed that dnsmasq would complete IPv6 DAD before
      daemonizing, but in reality it doesn't wait, which creates problems
      when libvirt's bridge driver sets the matching "dummy tap device" to
      IFF_DOWN prior to DAD completing.
      
      This patch waits for DAD completion by periodically polling the kernel
      using netlink to check whether there are any IPv6 addresses assigned
      to bridge which have a 'tentative' state (if there are any in this
      state, then DAD hasn't yet finished). After DAD is finished, execution
      continues. To avoid an endless hang in case something was wrong with
      the kernel's DAD, we wait a maximum of 5 seconds.
      0f7436ca
    • M
      netlink: add support for multi-part netlink messages. · 131e7245
      Maxim Perevedentsev 提交于
      Such messages do not have NLMSG_ERROR or NLMSG_DONE type
      but they are valid responses. We test 'multi-partness'
      by looking for NLM_F_MULTI flag.
      131e7245
    • L
      qemu: Use live autoNodeset when numatune placement is auto · 4eac5523
      Luyao Huang 提交于
      https://bugzilla.redhat.com/show_bug.cgi?id=1270715
      
      Commit id '9deb96f9' removed the code to fetch the nodeset from the
      CpusetMems cgroup for a running vm in favor of using the return from
      virDomainNumatuneFormatNodeset introduced by commit id '43b67f2e'.
      However, that API will return the value of the passed 'auto_nodeset'
      when placement is VIR_DOMAIN_NUMATUNE_PLACEMENT_AUTO, which happens
      to be NULL.
      
      Since commit id 'c74d58ad' started using priv->autoNodeset in order
      to manage the auto placement value during qemuProcessStart, it should
      be passed along in order to return the correct value if the domain
      requests the auto placement.
      Signed-off-by: NLuyao Huang <lhuang@redhat.com>
      4eac5523
  2. 28 10月, 2015 2 次提交
  3. 27 10月, 2015 7 次提交
  4. 26 10月, 2015 5 次提交
  5. 22 10月, 2015 6 次提交
    • A
      tests: Remove unused nodeinfo test data · e739d956
      Andrea Bolognani 提交于
      A bunch of files that we don't currently parse, and are very
      unlikely to ever start parsing, made their way into the nodeinfo
      test data. Get rid of them.
      e739d956
    • L
      virsh: Display an error when passing count <= 0 to setvcpus · c62c59a9
      Luyao Huang 提交于
      The number of vCPUs for a guest must be between 1 and the
      maximum value configured in the domain XML. This commit
      introduces checks to make sure that passing count <= 0
      results in an error.
      
      Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1248277Signed-off-by: NLuyao Huang <lhuang@redhat.com>
      c62c59a9
    • J
      conf: Fix error message to use correct parameter · 4527b2ae
      John Ferlan 提交于
      Fix a cut-n-paste error from commit id '35eecdde' where the previous
      check for max_sectors seems to have been copied, but the error message
      parameter not updated to be ioeventfd
      4527b2ae
    • L
      util: Produce friendlier error message to user · 4f9e61f6
      Luyao Huang 提交于
      Commit id '1c24cfe9' added error messages for virNumaSetPagePoolSize;
      however, virNumaGetHugePageInfo also uses virNumaGetHugePageInfoPath
      in order to build the path, but it never checked upon return if
      the built path exists which could lead to an error message as follows:
      
      $ virsh freepages 0 1
      error: Failed to open file
          '/sys/devices/system/node/node0/hugepages/hugepages-1kB/free_hugepages':
          No such file or directory
      
      Rather than add the same message for the other two callers, adjust
      the virNumaGetHugePageInfoPath in order not only build the path, but
      also check if the built path exists.  If the path does not exist,
      then generate the error message and return failure.
      Signed-off-by: NLuyao Huang <lhuang@redhat.com>
      4f9e61f6
    • L
      util: Adjust error paths for virNumaSetPagePoolSize · e802d7ef
      Luyao Huang 提交于
      Commit id '1c24cfe9' added new checks and error messaes for failure
      scenarios. Let's adjust those error messages to after the call to
      virNumaGetHugePageInfoPath in order to provide a more specific error
      message depending on node and page_size
      
      After this patch:
       # virsh allocpages --pagesize 2047 --pagecount 1 --cellno 0
       error: operation failed: page size 2047 is not available on node 0
      
       # virsh allocpages --pagesize 2047 --pagecount 1
       error: operation failed: page size 2047 is not available
      Signed-off-by: NLuyao Huang <lhuang@redhat.com>
      e802d7ef
    • L
      util: split the virNumaGetHugePageInfoPath into separate function · deb8c66d
      Luyao Huang 提交于
      https://bugzilla.redhat.com/show_bug.cgi?id=1265114
      
      Refactor helper virNumaGetHugePageInfoPath to handle returning a directory
      path when passed a page_size of 0 and suffix == NULL into a new helper
      virNumaGetHugePageInfoDir which will only be called when a directory
      path is expected to be returned. This solves the issue where the helper
      was called with page_size == 0 expecting a file path in return, but
      instead got a directory path and failed in virFileReadAll with:
      
          error : virFileReadAll:1358 : Failed to read file
                      '/sys/devices/system/node/node0/hugepages/': Is a directory
      
      Since virNumaGetPages API expects to return a directory by passing
      page_size == 0 and suffix == NULL, it will now call the new helper.
      Callers to virNumaGetHugePageInfoPath expect to return a file path
      which could then be used in the call to virFileReadAll.
      Signed-off-by: NLuyao Huang <lhuang@redhat.com>
      deb8c66d
  6. 21 10月, 2015 1 次提交
  7. 20 10月, 2015 5 次提交
  8. 16 10月, 2015 10 次提交
    • M
      security_dac: Introduce remember/recall APIs · 6222a6fe
      Michal Privoznik 提交于
      Even though the APIs are not implemented yet, they create a
      skeleton that can be filled in later.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      6222a6fe
    • M
      security_dac: Limit usage of virSecurityDACSetOwnershipInternal · ec04c18b
      Michal Privoznik 提交于
      This function should really be called only when we want to change
      ownership of a file (or disk source). Lets switch to calling a
      wrapper function which will eventually record the current owner
      of the file and call virSecurityDACSetOwnershipInternal
      subsequently.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      ec04c18b
    • M
      virSecurityDACRestoreSecurityFileLabel: Pass virSecurityDACDataPtr · fdf44d5b
      Michal Privoznik 提交于
      This is pure code adjustment. The structure is going to be needed
      later as it will hold a reference that will be used to talk to
      virtlockd. However, so far this is no functional change just code
      preparation.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      fdf44d5b
    • M
      virSecurityDACSetOwnership: Pass virSecurityDACDataPtr · 607f3431
      Michal Privoznik 提交于
      This is pure code adjustment. The structure is going to be needed
      later as it will hold a reference that will be used to talk to
      virtlockd. However, so far this is no functional change just code
      preparation.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      607f3431
    • M
      virSecurityDACSetOwnershipInternal: Don't chown so often · a0f43d82
      Michal Privoznik 提交于
      It's better if we stat() file that we are about to chown() at
      first and check if there's something we need to change. Not that
      it would make much difference, but for the upcoming patches we
      need to be doing stat() anyway. Moreover, if we do things this
      way, we can drop @chown_errno variable which will become
      redundant.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      a0f43d82
    • M
      security_dac: Fix TODO marks · d37d8f78
      Michal Privoznik 提交于
      Correctly mark the places where we need to remember and recall
      file ownership. We don't want to mislead any potential developer.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      d37d8f78
    • M
      virtlockd: Don't SIGSEGV on SIGUSR1 · 499e302f
      Michal Privoznik 提交于
      So we have this mechanism that on SIGUSR1 the virtlockd dumps its
      internal state into a JSON file, reexec itself and the reloads
      the internal state back. However, there's a bug in our
      implementation:
      
        (gdb) signal SIGUSR1
        Continuing with signal SIGUSR1.
        [Thread 0x7fd094f7b700 (LWP 10602) exited]
        process 10600 is executing new program: /home/zippy/work/libvirt/libvirt.git/src/virtlockd
        warning: Could not load shared library symbols for linux-vdso.so.1.
        Do you need "set solib-search-path" or "set sysroot"?
        [Thread debugging using libthread_db enabled]
        Using host libthread_db library "/lib64/libthread_db.so.1".
        [New Thread 0x7fb28bc3c700 (LWP 14501)]
      
        Program received signal SIGSEGV, Segmentation fault.
        0x00007fb29133d530 in virExpandN (ptrptr=0x70, size=8, countptr=0x68, add=1, report=true, domcode=7, filename=0x7fb29138aeab "rpc/virnetserver.c", funcname=0x7fb29138b680 <__FUNCTION__.15821> "virNetServerAddProgram", linenr=661) at util/viralloc.c:288
        288         if (*countptr + add < *countptr) {
        (gdb) bt
        #0  0x00007fb29133d530 in virExpandN (ptrptr=0x70, size=8, countptr=0x68, add=1, report=true, domcode=7, filename=0x7fb29138aeab "rpc/virnetserver.c", funcname=0x7fb29138b680 <__FUNCTION__.15821> "virNetServerAddProgram", linenr=661) at util/viralloc.c:288
        #1  0x00007fb29132a267 in virNetServerAddProgram (srv=0x0, prog=0x7fb2915d08b0) at rpc/virnetserver.c:661
        #2  0x00007fb29131f27f in main (argc=1, argv=0x7fff8f771298) at locking/lock_daemon.c:1445
      
      Notice the NULL @srv passed to frame 2? Usually, the @srv
      variable is initialized on fresh start. However, in case of
      daemon reload, the code path that is responsible for initializing
      the value was not triggered and therefore we crashed immediately.
      Fix this by always setting the variable.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      499e302f
    • S
      Close the source fd if the destination qemu exits during tunnelled migration · b39a1fe1
      Shivaprasad G Bhat 提交于
      Tunnelled migration can hang if the destination qemu exits despite all the
      ABI checks. This happens whenever the destination qemu exits before the
      complete transfer is noticed by source qemu. The savevm state checks at
      runtime can fail at destination and cause qemu to error out.
      The source qemu cant notice it as the EPIPE is not propogated to it.
      The qemuMigrationIOFunc() notices the stream being broken from virStreamSend()
      and it cleans up the stream alone. The qemuMigrationWaitForCompletion() would
      never get to 100% transfer completion.
      The qemuMigrationWaitForCompletion() never breaks out as well since
      the ssh connection to destination is healthy, and the source qemu also thinks
      the migration is ongoing as the Fd to which it transfers, is never
      closed or broken. So, the migration will hang forever. Even Ctrl-C on the
      virsh migrate wouldn't be honoured. Close the source side FD when there is
      an error in the stream. That way, the source qemu updates itself and
      qemuMigrationWaitForCompletion() notices the failure.
      
      Close the FD for all kinds of errors to be sure. The error message is not
      copied for EPIPE so that the destination error is copied instead later.
      
      Note:
      Reproducible with repeated migrations between Power hosts running in different
      subcores-per-core modes.
      Signed-off-by: NShivaprasad G Bhat <sbhat@linux.vnet.ibm.com>
      b39a1fe1
    • J
      conf: Optimize the iothreadid initialization · bb02d4c4
      John Ferlan 提交于
      https://bugzilla.redhat.com/show_bug.cgi?id=1264008
      
      The existing algorithm assumed that someone was making small, incremental
      changes; however, it is possible to change iothreads from 0 (or relatively
      small number) to some really large number and the algorithm would possibly
      spin its wheels doing unnecessary searches.
      
      So, optimize the algorithm using a bitmap to find available iothread_id's
      starting at 1 that aren't already defined by a "<thread id='#'>" and
      filling in the iothreadids array with those iothread_id values.
      bb02d4c4
    • J
      qemu: Fix qemu startup check for QEMU_CAPS_OBJECT_IOTHREAD · cc2d49f9
      John Ferlan 提交于
      https://bugzilla.redhat.com/show_bug.cgi?id=1249981
      
      When qemuDomainPinIOThread was added in commit id 'fb562614', a check
      for the IOThread capability was not needed since a check for iothreadpids
      covered the condition where the support for IOThreads was not present.
      The iothreadpids array was only created if qemuProcessDetectIOThreadPIDs
      was able to query the monitor for IOThreads. It would only do that if
      the QEMU_CAPS_OBJECT_IOTHREAD capability was set.
      
      However, when iothreadids were added in commit id '8d4614a5' and the
      check for iothreadpids was replaced by a search through the iothreadids[]
      array for the matching iothread_id that left open the possibility that
      an iothreadids[] array was defined, but the entries essentially pointed
      to elements with only the 'iothread_id' defined leaving the 'thread_id'
      value of 0 and eventually the cpumap entry of NULL.
      
      This was because, the original IOThreads commit id '72edaae7' only
      checked if IOThreads were defined and if the emulator had the IOThreads
      capability, then IOThread objects were added at startup. The "capability
      failure" check was only done when a disk was assigned to an IOThread in
      qemuCheckIOThreads. This was because the initial implementation had no way
      to dynamically add IOThreads, but it was possible to dynamically add a
      disk to the domain. So the decision was if the domain supported it, then
      add the IOThread objects. Then if a disk with an IOThread defined was
      added, it could check the capability and fail to add if not there. This
      just meant the 'iothreads' value was essentially ignored.
      
      Eventually commit id 'a27ed6e7' allowed for the dynamic addition and
      deletion of IOThread objects. So it was no longer necessary to generate
      IOThread objects to dynamically attach a disk to. However, the startup
      and disk check code was not modified to reflect this.
      
      This patch will move the capability failure check to when IOThread
      objects are being added to the command line. Thus a domain that has
      IOThreads defined will not be started if the emulator doesn't support
      the capability. This means when qemuCheckIOThreads is called to add
      a disk, it's no longer necessary to check the capability. Instead the
      code can use the IOThreadFind call to indicate that the IOThread
      doesn't exist.
      
      Finally because it could be possible to have a domain running with the
      iothreadids[] defined prior to this change if libvirtd is restarted each
      having mostly empty elements, qemuProcessDetectIOThreadPIDs will check
      if there are niothreadids when the QEMU_CAPS_OBJECT_IOTHREAD capability
      check fails and remove the elements and array if it exists.
      
      With these changes in place, it turns out the cputune-numatune test
      was failing because the right bit wasn't set in the test. So used the
      opportunity to fix that and create a test that would expect to fail
      with some sort of iothreads defined and used, but not having the
      correct capability.
      cc2d49f9