1. 26 7月, 2017 13 次提交
  2. 25 7月, 2017 18 次提交
    • M
      Move machineName generation from virsystemd into domain_conf · eaf2c9f8
      Martin Kletzander 提交于
      It is more related to a domain as we might use it even when there is
      no systemd and it does not use any dbus/systemd functions.  In order
      not to use code from conf/ in util/ pass machineName in cgroups code
      as a parameter.  That also fixes a leak of machineName in the lxc
      driver and cleans up and de-duplicates some code.
      Signed-off-by: NMartin Kletzander <mkletzan@redhat.com>
      eaf2c9f8
    • M
      lxc: Make lxcProcessStop callable even without PID being available · aa0dfb91
      Martin Kletzander 提交于
      This way the function can work as a central point of clean-up code and
      we don't have to duplicate code.  And it works similarly to the qemu
      driver.
      Signed-off-by: NMartin Kletzander <mkletzan@redhat.com>
      aa0dfb91
    • M
      qemu: Save qemu driver in qemuDomainObjPrivateData · 2e6ecba1
      Martin Kletzander 提交于
      This way we can finally make it static and not use any externs anywhere.
      Signed-off-by: NMartin Kletzander <mkletzan@redhat.com>
      2e6ecba1
    • M
      conf: Pass config.priv to xmlopt->privateData.alloc · 6e6faf6d
      Martin Kletzander 提交于
      This will help us to get to some data more easily.
      Signed-off-by: NMartin Kletzander <mkletzan@redhat.com>
      6e6faf6d
    • J
      secret: Handle object list removal and deletion properly · 867bcc9c
      John Ferlan 提交于
      Rather than rely on virSecretObjEndAPI to make the final virObjectUnref
      after the call to virSecretObjListRemove, be more explicit by calling
      virObjectUnref and setting @obj to NULL for secretUndefine and in
      the error path of secretDefineXML. Calling EndAPI will end up calling
      Unlock on an already unlocked object which has indeteriminate results
      (usually an ignored error).
      
      The virSecretObjEndAPI will both Unref and Unlock the object; however,
      the virSecretObjListRemove would have already Unlock'd the object so
      calling Unlock again is incorrect. Once the virSecretObjListRemove
      is called all that's left is to Unref our interest since that's the
      corrollary to the virSecretObjListAdd which returned our ref interest
      plus references for each hash table in which the object resides. In math
      terms, after an Add there's 2 refs on the object (1 for the object and
      1 for the list). After calling Remove there's just 1 ref on the object.
      For the Add callers, calling EndAPI removes the ref for the object and
      unlocks it, but since it's in a list the other 1 remains.
      Signed-off-by: NJohn Ferlan <jferlan@redhat.com>
      867bcc9c
    • J
      secret: Fix memory leak in virSecretLoad · d04bc027
      John Ferlan 提交于
      If the virSecretLoadValue fails, the code jumped to cleanup without
      setting @ret = obj, thus calling virSecretObjListRemove which only
      accounts for the object reference related to adding the object to
      the list during virSecretObjListAdd, but does not account for the
      reference to the object itself as the return of @ret would be NULL
      so the caller wouldn't call virSecretObjEndAPI on the object recently
      added thus reducing the refcnt to zero.
      
      This patch will perform the ObjListRemove in the failure path of
      virSecretLoadValue and Unref @obj in order to perform clean up
      and return @obj as NULL. The @def will be freed as part of the
      virObjectUnref.
      d04bc027
    • J
      secret: Properly handle @def after virSecretObjAdd in driver · e4c0aff2
      John Ferlan 提交于
      Since the virSecretObjListAdd technically consumes @def on success,
      the secretDefineXML should set @def = NULL immediately and process
      the remaining calls using a new @objDef variable. We can use use
      VIR_STEAL_PTR since we know the Add function just stores @def in
      obj->def.
      
      Because we steal @def into @objDef, if we jump to restore_backup:
      and @backup is set, then we need to ensure the @def would be
      free'd properly, so we'll steal it back from @objDef. For the other
      condition this fixes a double free of @def if the code had jumped to
      @backup == NULL thus calling virSecretObjListRemove without setting
      @def = NULL. In this case, the subsequent call to DefFree would
      succeed and free @def; however, the call to EndAPI would also
      call DefFree because the Unref done would be the last one for
      the @obj meaning the obj->def would be used to call DefFree,
      but it's already been free'd because @def wasn't managed right
      within this error path.
      Signed-off-by: NJohn Ferlan <jferlan@redhat.com>
      e4c0aff2
    • J
      secret: Remove need for local configFile and base64File in ObjectAdd · 7ca17da9
      John Ferlan 提交于
      Rather than assign to a local variable, let's just assign directly to the
      object using the error path for cleanup.
      Signed-off-by: NJohn Ferlan <jferlan@redhat.com>
      7ca17da9
    • M
      Revert "virthread: Introduce virRWLockInitPreferWriter" · 2d3c7122
      Michal Privoznik 提交于
      This reverts commit 328bd244.
      
      As it turns out, this is not portable and very Linux & glibc
      specific. Worse, this may lead to not starving writers on Linux
      but everywhere else. Revert this and if the starvation occurs
      resolve it.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      Reviewed-by: NDaniel P. Berrange <berrange@redhat.com>
      2d3c7122
    • A
      conf: Rename virDomainControllerIsPCIHostBridge() to IsPSeriesPHB() · bbda2883
      Andrea Bolognani 提交于
      The original name didn't hint at the fact that PHBs are
      a pSeries-specific concept.
      Suggested-by: NPeter Krempa <pkrempa@redhat.com>
      Signed-off-by: NAndrea Bolognani <abologna@redhat.com>
      bbda2883
    • A
      conf: Fix backwards migration of pSeries guests · 9b45cd8f
      Andrea Bolognani 提交于
      Recent commits made it so that pci-root controllers for
      pSeries guests are automatically assigned the
      spapr-pci-host-bridge model name; however, that prevents
      guests to migrate to older versions of libvirt which don't
      know about that model name at all, which at the moment is
      all of them :)
      
      To avoid the issue, just strip the model name from PHBs
      when formatting the migratable XML; guests that use more
      than one PHB are not going to be migratable anyway.
      Signed-off-by: NAndrea Bolognani <abologna@redhat.com>
      9b45cd8f
    • J
      storage: Check if provided parent is vHBA capable · f7237d63
      John Ferlan 提交于
      https://bugzilla.redhat.com/show_bug.cgi?id=1458708
      
      If the parent provided for the storage pool adapter is not vHBA
      capable, then issue a configuration error even though the provided
      wwnn/wwpn were found.
      
      It is a configuration error to provide a mismatched parent to
      the wwnn/wwpn. The @parent is optional and is used as a means to
      perform duplicate pool source checks.
      f7237d63
    • J
      storage: Remove @conn from virNodeDeviceCreateVport · 214a353c
      John Ferlan 提交于
      It's no longer needed since the checkParent code moved back to
      storage_backend_scsi.c
      Signed-off-by: NJohn Ferlan <jferlan@redhat.com>
      214a353c
    • J
      storage: Fix existing parent check for vHBA creation · c4030331
      John Ferlan 提交于
      https://bugzilla.redhat.com/show_bug.cgi?id=1472277
      
      Commit id '106930aa' altered the order of checking for an existing
      vHBA (e.g something created via nodedev-create functionality outside
      of the storage pool logic) which inadvertantly broke the code to
      decide whether to alter/force the fchost->managed field to be 'yes'
      because the storage pool will be managing the created vHBA in order
      to ensure when the storage pool is destroyed that the vHBA is also
      destroyed.
      
      This patch moves the check (and checkParent helper) for an existing
      vHBA back into the createVport in storage_backend_scsi. It also
      adjusts the checkParent logic to more closely follow the intentions
      prior to commit id '79ab0935'. The changes made by commit id '08c0ea16'
      are only necessary to run the virStoragePoolFCRefreshThread when
      a vHBA was really created because there's a timing lag such that
      the refreshPool call made after a startPool from storagePoolCreate*
      wouldn't necessarily find LUNs, but the thread would. For an already
      existing vHBA, using the thread is unnecessary since the vHBA already
      exists and the lag to configure the LUNs wouldn't exist.
      Signed-off-by: NJohn Ferlan <jferlan@redhat.com>
      c4030331
    • J
      nodedev: Remove driver locks around object list mgmt code · 4cb719b2
      John Ferlan 提交于
      Since virnodedeviceobj now has a self-lockable hash table, there's no
      need to lock the table from the driver for processing. Thus remove the
      locks from the driver for NodeDeviceObjList mgmt.
      
      This includes the test driver as well.
      4cb719b2
    • J
      nodedev: Convert virNodeDeviceObjListPtr to use hash tables · 4ae9dbea
      John Ferlan 提交于
      Rather than use a forward linked list of elements, it'll be much more
      efficient to use a hash table to reference the elements by unique name
      and to perform hash searches.
      
      This patch does all the heavy lifting of converting the list object to
      use a self locking list that contains the hash table. Each of the FindBy
      functions that do not involve finding the object by it's key (name) is
      converted to use virHashSearch in order to find the specific object.
      When searching for the key (name), it's possible to use virHashLookup.
      For any of the list perusal functions that are required to evaluate
      each object, the virHashForEach function is used.
      4ae9dbea
    • J
      nodedev: Remove @create from virNodeDeviceObjListGetParentHost · 8f6679d9
      John Ferlan 提交于
      The only callers to this function are from CreateXML paths now, so
      let's just remove the unnecessary parameter.
      8f6679d9
    • J
      nodedev: Alter node device deletion logic · 5ba2ce65
      John Ferlan 提交于
      Alter the node device deletion logic to make use of the parent field
      from the obj->def rather than call virNodeDeviceObjListGetParentHost.
      As it turns out the saved @def won't have parent_wwnn/wwpn or
      parent_fabric_wwn, so the only logical path would be to call
      virNodeDeviceObjListGetParentHostByParent which we can accomplish
      directly via virNodeDeviceObjListFindByName.
      5ba2ce65
  3. 24 7月, 2017 9 次提交
    • M
      virdomainobjlist: Use virObjectRWLockable · 4860582f
      Michal Privoznik 提交于
      There is no reason why two threads trying to look up two domains
      should mutually exclude each other. Utilize new
      virObjectRWLockable that was just introduced.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      Reviewed-by: NPavel Hrdina <phrdina@redhat.com>
      4860582f
    • M
      virobject: Introduce virObjectRWLockable · 77f4593b
      Michal Privoznik 提交于
      Up until now we only had virObjectLockable which uses mutexes for
      mutually excluding each other in critical section. Well, this is
      not enough. Future work will require RW locks so we might as well
      have virObjectRWLockable which is introduced here.
      
      Moreover, polymorphism is introduced to our code for the first
      time. Yay! More specifically, virObjectLock will grab a write
      lock, virObjectLockRead will grab a read lock then (what a
      surprise right?). This has great advantage that an object can be
      made derived from virObjectRWLockable in a single line and still
      continue functioning properly (mutexes can be viewed as grabbing
      write locks only). Then just those critical sections that can
      grab a read lock need fixing. Therefore the resulting change is
      going to be way smaller.
      
      In order to avoid writer starvation, the object initializes RW
      lock that prefers writers.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      Reviewed-by: NPavel Hrdina <phrdina@redhat.com>
      77f4593b
    • M
      virthread: Introduce virRWLockInitPreferWriter · 328bd244
      Michal Privoznik 提交于
      We already have virRWLockInit. But this uses pthread defaults
      which prefer reader to initialize the RW lock. This may lead to
      writer starvation. Therefore we need to have the counterpart that
      prefers writers. Now, according to the
      pthread_rwlockattr_setkind_np() man page setting
      PTHREAD_RWLOCK_PREFER_WRITER_NP attribute is no-op. Therefore we
      need to use PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP
      attribute. So much for good enum value names.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      Reviewed-by: NPavel Hrdina <phrdina@redhat.com>
      328bd244
    • M
      testutils: Remove unneeded variable · 64bebb2b
      Martin Kletzander 提交于
      virDomainXMLOptionNew() gladly accepts NULL and it is used in some
      drivers.  There is no need for additional variable with no members set
      Signed-off-by: NMartin Kletzander <mkletzan@redhat.com>
      64bebb2b
    • S
      qemu_capabilities: Fix the formatting with a space · 1cb188de
      Shivaprasad G Bhat 提交于
      It was observed while adding new property that there should be a space
      before closing a curly brace in intel-iommu object property definition.
      Fixing it as a separate patch.
      Signed-off-by: NShivaprasad G Bhat <sbhat@linux.vnet.ibm.com>
      1cb188de
    • M
      docs: Span cells if there's not doc text for enum val · 099a5ef8
      Michal Privoznik 提交于
      When generating HTML documentation we put enum values into a
      table so that we can display the value's name, numerical value
      and description (if it has one). Now the last part is problem. If
      the value doesn't have description the table row has just two
      cells and if it has one the row counts three cells. This makes
      HTML engines render the description into very little space - for
      instance see:
      
        html/libvirt-libvirt-domain.html#virDomainMemoryStatTags
      
      We can avoid this problem if we let the cell that corresponds to
      numerical value span over two cells if there's no description.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      Reviewed-by: NMartin Kletzander <mkletzan@redhat.com>
      099a5ef8
    • M
      apibuild.py: Handle enum comments properly · 6efdd94d
      Michal Privoznik 提交于
      After f4cb85c6 we only have two options for placing enum
      values descriptions. It's either:
      
          typedef enum {
              /* Some long description. Therefore it's placed before
               * the value. */
              VIR_ENUM_A_VAL = 1,
          } virEnumA;
      
      or:
      
          typedef enum {
              VIR_ENUM_B_VAL = 1, /* Some short description */
          } virEnumB;
      
      However, our apibuild.py script is not able to deal with the
      former one. It messes up comments. To fix this couple of things
      needs to be done:
      
      a) DO NOT reset self.comment in parseEnumBlock(). This is a
      result from our tokenizer. Upon calling token() if it finds a
      comment block it stores it in self.comment and returns the next
      token (which is not comment). Therefore, if we reset self.comment
      we might lose the first comment in the enum block.
      
      b) we need a variable to track if the current enum block uses
      value descriptions before or after values. That is if it's type
      virEnumA or virEnumB. Depending on that, it we're dealing with
      virEnumA type and the current token is a comma ',' we can add the
      value into the list as we already have everything needed:
      comment, name and value.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      Reviewed-by: NMartin Kletzander <mkletzan@redhat.com>
      6efdd94d
    • P
      virStorageNetHostDef: Turn @port into integer · 97ea8da1
      Peter Krempa 提交于
      Currently, @port is type of string. Well, that's overkill and
      waste of memory. Port is always an integer. Use it as such.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      97ea8da1
    • P
      conf: domain: Split up virDomainStorageHostParse and rename it · a7828886
      Peter Krempa 提交于
      Split out parsing of one host into a separate function and add a new
      function to loop through all the host XML nodes.
      
      This change removes multiple levels of nesting due to the old XML
      parsing approach used.
      a7828886