[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