[Libvirt-cim] [PATCH v4] Fix AppliedFilterList creation and deletion

Eduardo Lima (Etrunko) eblima at linux.vnet.ibm.com
Tue Jan 31 21:22:25 UTC 2012


On 01/26/2012 06:01 PM, Chip Vincent wrote:
> From: Chip Vincent <cvincent at us.ibm.com>
> 
> Fixes many small issues with the current AppliedFilterList provider.
> 
> 1) Fix Create to properly return a complete object path and fix Delete to
>    properly parse that path.
> 
> 2) Persist applied filer rules. Since it's not possible to dyanmically update
>    a single device, I've changed the code to modify and re-define the VM to
>    essentially add/remove ACL filter associations.
> 
>    I also updated the code to minimize domain/device parsing overhead. For
>    some strange reason, our internal APIs sometimes take a virDomainPtr and
>    other times a struct domain * forcing providers who work with domains
>    *and* devices to parse everything twice. Until the internal APIs are
>    cleaned up, I simply parse everything once and then fetch the device
>    manually from the struct domain *.
> 
> 3) Add VIR_DOMAIN_XML_INACTIVE to virDomainGetXML(). By default, libvirt only
>    returns the XML of the running domain. We need to fetch the *stored* XML
>    that will be used for the next boot so that all changes made while the VM
>    is running are preserved.
> 
> Changes from v3:
>  - Fix NestedFilterList DeleteInstance
>  - Fix remove_filter_ref() in acl_parsing.c (intend to refactor in
>    future patch)
> 
> Changes from v2:
>  - Return the correct reference in NestedFilterList
> 
> Changes from v1:
>  - Fix leak and other comments
>  - Fix all cases virDomainGetXML()
>  - Fix NestedFilterList Create/Delete instance
> 
> Signed-off-by: Chip Vincent <cvincent at us.ibm.com>
> ---
>  libxkutil/acl_parsing.c             |    1 +
>  libxkutil/device_parsing.c          |    6 ++-
>  src/Virt_AppliedFilterList.c        |   97 +++++++++++++++++++----------------
>  src/Virt_ComputerSystem.c           |    3 +-
>  src/Virt_ComputerSystemIndication.c |    3 +-
>  src/Virt_FilterList.c               |    5 ++-
>  src/Virt_NestedFilterList.c         |   19 +++++--
>  src/Virt_VSMigrationService.c       |    3 +-
>  8 files changed, 82 insertions(+), 55 deletions(-)
> 
> diff --git a/libxkutil/acl_parsing.c b/libxkutil/acl_parsing.c
> index 5b6d7bb..9c4b4b2 100644
> --- a/libxkutil/acl_parsing.c
> +++ b/libxkutil/acl_parsing.c
> @@ -652,6 +652,7 @@ int remove_filter_ref(struct acl_filter *filter, const char *name)
> 
>          /* TODO: called infrequently, but needs optimization */
>          old_refs = filter->refs;
> +        filter->ref_ct = 0;

I know it is a bit too late, since the code has already been pushed.
Taking a closer look now, I find this line avoids the crash we were
having in the deletion of the NestedFilterList instance, but in the end
it will cause filter->refs to leak.

I tried to understand the code and it looks too much complex for the
purpose of only removing a string of an array. Taking this into account,
I took the next step and ported the ACL code to use the linked list
implementation.

I have just updated the linked list patch series and sent v4 for review.
Please take a look. We should either use this new patch or fix this code
properly.

Best regards,

-- 
Eduardo de Barros Lima
Software Engineer, Open Virtualization
Linux Technology Center - IBM/Brazil
eblima at br.ibm.com




More information about the Libvirt-cim mailing list