[libvirt] [PATCH] network: don't even call networkRunHook if there is no network

Michal Privoznik mprivozn at redhat.com
Wed Feb 26 10:42:34 UTC 2014


On 25.02.2014 16:46, Laine Stump wrote:
> networkAllocateActualDevice() is called for *all* interfaces, not just
> those with type='network'. In that case, it will jump down to its
> validate: label immediately, without allocating anything. After
> validation is done, two counters are potentially updated (one for the
> network, and one for any particular physical device that is chosen),
> and then networkRunHook() is called.
>
> This patch refactors that code a slight bit so that networkRunHook()
> doesn't get called if netdef is NULL (i.e. type != network) and to
> place the conditional increment of dev->connections inside the "if
> (netdef)" as well - dev can never be non-null if netdef is null
> (because "dev" is the pointer to a device in a network's pool of
> devices), so this doesn't have any functional effect, it just makes
> the code clearer.
> ---
>   src/network/bridge_driver.c | 47 ++++++++++++++++++++++-----------------------
>   1 file changed, 23 insertions(+), 24 deletions(-)
>
> diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
> index 152bd06..3fb5ad3 100644
> --- a/src/network/bridge_driver.c
> +++ b/src/network/bridge_driver.c
> @@ -3662,36 +3662,35 @@ validate:
>           }
>       }
>
> -    if (dev) {
> -        /* mark the allocation */
> -        dev->connections++;
> -        if (actualType != VIR_DOMAIN_NET_TYPE_HOSTDEV) {
> -            VIR_DEBUG("Using physical device %s, %d connections",
> -                      dev->device.dev, dev->connections);
> -        } else {
> -            VIR_DEBUG("Using physical device %04x:%02x:%02x.%x, connections %d",
> -                      dev->device.pci.domain, dev->device.pci.bus,
> -                      dev->device.pci.slot, dev->device.pci.function,
> -                      dev->connections);
> -        }
> -    }
> -
>       if (netdef) {
>           netdef->connections++;
>           VIR_DEBUG("Using network %s, %d connections",
>                     netdef->name, netdef->connections);
> -    }
>
> -    /* finally we can call the 'plugged' hook script if any */
> -    if (networkRunHook(network, dom, iface,
> -                       VIR_HOOK_NETWORK_OP_IFACE_PLUGGED,
> -                       VIR_HOOK_SUBOP_BEGIN) < 0) {
> -        /* adjust for failure */
> -        if (dev)
> -            dev->connections--;
> -        if (netdef)
> +        if (dev) {
> +            /* mark the allocation */
> +            dev->connections++;
> +            if (actualType != VIR_DOMAIN_NET_TYPE_HOSTDEV) {
> +                VIR_DEBUG("Using physical device %s, %d connections",
> +                          dev->device.dev, dev->connections);
> +            } else {
> +                VIR_DEBUG("Using physical device %04x:%02x:%02x.%x, connections %d",
> +                          dev->device.pci.domain, dev->device.pci.bus,
> +                          dev->device.pci.slot, dev->device.pci.function,
> +                          dev->connections);
> +            }
> +        }
> +
> +        /* finally we can call the 'plugged' hook script if any */
> +        if (networkRunHook(network, dom, iface,
> +                           VIR_HOOK_NETWORK_OP_IFACE_PLUGGED,
> +                           VIR_HOOK_SUBOP_BEGIN) < 0) {
> +            /* adjust for failure */
>               netdef->connections--;
> -        goto error;
> +            if (dev)
> +                dev->connections--;
> +            goto error;
> +        }
>       }
>
>       ret = 0;
>

I thought this problem was solved by 83c404ff. I wonder what went wrong. 
Or maybe nothing is actually wrong, and this is merely just a refactoring.

Michal




More information about the libvir-list mailing list