[libvirt] [PATCH] network: fix connections count in case of allocate failure

Michal Privoznik mprivozn at redhat.com
Tue Nov 5 15:36:22 UTC 2013


On 05.11.2013 11:33, Laine Stump wrote:
> This resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1020135
> 
> If networkAllocateActualDevice() had failed due to a pool of hostdev
> or direct devices being depleted, the calling function could still
> call networkReleaseActualDevice() as part of its cleanup, and that
> function would then unconditionally decrement the connections count
> for the network, even though it hadn't been incremented (due to
> failure of allocate). This *was* necessary because the .actual member
> of the netdef was allocated with a "lazy" algorithm, only being
> created if there was a need to store data there (e.g. if a device was
> allocated from a pool, or bandwidth was allocated for the device), so
> there was no simple way for networkReleaseActualDevice() to tell if
> something really had been allocated (i.e. if "connections++" had been
> executed).
> 
> This patch changes networkAllocateDevice() to *always* allocate an
> actual device for any netdef of type='network', even if it isn't
> needed for any other reason. This has no ill effects anywhere else in
> the code (except for using a small amount of memory), and
> networkReleaseActualDevice() can then determine if there was a
> previous successful allocate by checking for .actual != NULL (if not,
> it skips the "connections--").
> ---
>  src/network/bridge_driver.c | 41 +++++++++++------------------------------
>  1 file changed, 11 insertions(+), 30 deletions(-)

ACK

Michal




More information about the libvir-list mailing list