[libvirt] [PATCHv2 4/5] network: change cleanup: to error: in network*() functions

Kyle Mestery (kmestery) kmestery at cisco.com
Tue Aug 14 15:26:34 UTC 2012


Looks good.

Acked-by: Kyle Mestery <kmestery at cisco.com>

On Aug 14, 2012, at 2:10 AM, Laine Stump wrote:

> A later patch will be adding a counter that will be
> incremented/decremented each time an guest interface starts/stops
> using a particular network. For this to work, all types of networks
> need to go through a common return sequence rather than returning
> early. To setup for this, the existing cleanup: label is renamed to
> error:, a new cleanup: label is added (when necessary), and early
> returns are changed to goto cleanup (except the case where the
> interface type != NETWORK).
> ---
> src/network/bridge_driver.c | 106 ++++++++++++++++++++++----------------------
> 1 file changed, 53 insertions(+), 53 deletions(-)
> 
> diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
> index 77b38d2..680b3f3 100644
> --- a/src/network/bridge_driver.c
> +++ b/src/network/bridge_driver.c
> @@ -2767,9 +2767,8 @@ networkAllocateActualDevice(virDomainNetDefPtr iface)
>         virReportError(VIR_ERR_NO_NETWORK,
>                        _("no network with matching name '%s'"),
>                        iface->data.network.name);
> -        goto cleanup;
> +        goto error;
>     }
> -
>     netdef = network->def;
> 
>     /* portgroup can be present for any type of network, in particular
> @@ -2786,12 +2785,12 @@ networkAllocateActualDevice(virDomainNetDefPtr iface)
>         if (!iface->data.network.actual
>             && (VIR_ALLOC(iface->data.network.actual) < 0)) {
>             virReportOOMError();
> -            goto cleanup;
> +            goto error;
>         }
> 
>         if (virNetDevBandwidthCopy(&iface->data.network.actual->bandwidth,
>                                    portgroup->bandwidth) < 0)
> -            goto cleanup;
> +            goto error;
>     }
> 
>     if ((netdef->forwardType == VIR_NETWORK_FORWARD_NONE) ||
> @@ -2813,14 +2812,14 @@ networkAllocateActualDevice(virDomainNetDefPtr iface)
>         if (!iface->data.network.actual
>             && (VIR_ALLOC(iface->data.network.actual) < 0)) {
>             virReportOOMError();
> -            goto cleanup;
> +            goto error;
>         }
> 
>         iface->data.network.actual->type = VIR_DOMAIN_NET_TYPE_BRIDGE;
>         iface->data.network.actual->data.bridge.brname = strdup(netdef->bridge);
>         if (!iface->data.network.actual->data.bridge.brname) {
>             virReportOOMError();
> -            goto cleanup;
> +            goto error;
>         }
> 
>         /* merge virtualports from interface, network, and portgroup to
> @@ -2831,7 +2830,7 @@ networkAllocateActualDevice(virDomainNetDefPtr iface)
>                                         netdef->virtPortProfile,
>                                         portgroup
>                                         ? portgroup->virtPortProfile : NULL) < 0) {
> -            goto cleanup;
> +            goto error;
>         }
>         virtport = iface->data.network.actual->virtPortProfile;
>         if (virtport) {
> @@ -2842,7 +2841,7 @@ networkAllocateActualDevice(virDomainNetDefPtr iface)
>                                  "'%s' which uses a bridge device"),
>                                virNetDevVPortTypeToString(virtport->virtPortType),
>                                netdef->name);
> -                goto cleanup;
> +                goto error;
>             }
>         }
> 
> @@ -2858,7 +2857,7 @@ networkAllocateActualDevice(virDomainNetDefPtr iface)
>         if (!iface->data.network.actual
>             && (VIR_ALLOC(iface->data.network.actual) < 0)) {
>             virReportOOMError();
> -            goto cleanup;
> +            goto error;
>         }
> 
>         /* Set type=direct and appropriate <source mode='xxx'/> */
> @@ -2886,7 +2885,7 @@ networkAllocateActualDevice(virDomainNetDefPtr iface)
>                                         netdef->virtPortProfile,
>                                         portgroup
>                                         ? portgroup->virtPortProfile : NULL) < 0) {
> -            goto cleanup;
> +            goto error;
>         }
>         virtport = iface->data.network.actual->virtPortProfile;
>         if (virtport) {
> @@ -2898,7 +2897,7 @@ networkAllocateActualDevice(virDomainNetDefPtr iface)
>                                  "'%s' which uses a macvtap device"),
>                                virNetDevVPortTypeToString(virtport->virtPortType),
>                                netdef->name);
> -                goto cleanup;
> +                goto error;
>             }
>         }
> 
> @@ -2910,7 +2909,7 @@ networkAllocateActualDevice(virDomainNetDefPtr iface)
>                            _("network '%s' uses a direct mode, but "
>                              "has no forward dev and no interface pool"),
>                            netdef->name);
> -            goto cleanup;
> +            goto error;
>         } else {
>             /* pick an interface from the pool */
> 
> @@ -2927,19 +2926,19 @@ networkAllocateActualDevice(virDomainNetDefPtr iface)
>                         virReportError(VIR_ERR_INTERNAL_ERROR,
>                                        _("Could not get Virtual functions on %s"),
>                                        netdef->forwardPfs->dev);
> -                        goto cleanup;
> +                        goto error;
>                     }
> 
>                     if (num_virt_fns == 0) {
>                         virReportError(VIR_ERR_INTERNAL_ERROR,
>                                        _("No Vf's present on SRIOV PF %s"),
>                                        netdef->forwardPfs->dev);
> -                        goto cleanup;
> +                        goto error;
>                     }
> 
>                     if ((VIR_ALLOC_N(netdef->forwardIfs, num_virt_fns)) < 0) {
>                         virReportOOMError();
> -                        goto cleanup;
> +                        goto error;
>                     }
> 
>                     netdef->nForwardIfs = num_virt_fns;
> @@ -2948,7 +2947,7 @@ networkAllocateActualDevice(virDomainNetDefPtr iface)
>                         netdef->forwardIfs[ii].dev = strdup(vfname[ii]);
>                         if (!netdef->forwardIfs[ii].dev) {
>                             virReportOOMError();
> -                            goto cleanup;
> +                            goto error;
>                         }
>                     }
>                 }
> @@ -2987,18 +2986,18 @@ networkAllocateActualDevice(virDomainNetDefPtr iface)
>                                _("network '%s' requires exclusive access "
>                                  "to interfaces, but none are available"),
>                                netdef->name);
> -                goto cleanup;
> +                goto error;
>             }
>             iface->data.network.actual->data.direct.linkdev = strdup(dev->dev);
>             if (!iface->data.network.actual->data.direct.linkdev) {
>                 virReportOOMError();
> -                goto cleanup;
> +                goto error;
>             }
>         }
>     }
> 
>     if (virNetDevVPortProfileCheckComplete(virtport, true) < 0)
> -        goto cleanup;
> +        goto error;
> 
>     if (dev) {
>         /* we are now assured of success, so mark the allocation */
> @@ -3007,7 +3006,7 @@ networkAllocateActualDevice(virDomainNetDefPtr iface)
>                   dev->dev, dev->connections);
>     }
>     ret = 0;
> -cleanup:
> +error:
>     for (ii = 0; ii < num_virt_fns; ii++)
>         VIR_FREE(vfname[ii]);
>     VIR_FREE(vfname);
> @@ -3042,12 +3041,6 @@ networkNotifyActualDevice(virDomainNetDefPtr iface)
>     if (iface->type != VIR_DOMAIN_NET_TYPE_NETWORK)
>        return 0;
> 
> -    if (!iface->data.network.actual ||
> -        (virDomainNetGetActualType(iface) != VIR_DOMAIN_NET_TYPE_DIRECT)) {
> -        VIR_DEBUG("Nothing to claim from network %s", iface->data.network.name);
> -        return 0;
> -    }
> -
>     networkDriverLock(driver);
>     network = virNetworkFindByName(&driver->networks, iface->data.network.name);
>     networkDriverUnlock(driver);
> @@ -3055,6 +3048,13 @@ networkNotifyActualDevice(virDomainNetDefPtr iface)
>         virReportError(VIR_ERR_NO_NETWORK,
>                        _("no network with matching name '%s'"),
>                        iface->data.network.name);
> +        goto error;
> +    }
> +    netdef = network->def;
> +
> +    if (!iface->data.network.actual ||
> +        (virDomainNetGetActualType(iface) != VIR_DOMAIN_NET_TYPE_DIRECT)) {
> +        VIR_DEBUG("Nothing to claim from network %s", iface->data.network.name);
>         goto cleanup;
>     }
> 
> @@ -3063,16 +3063,15 @@ networkNotifyActualDevice(virDomainNetDefPtr iface)
>         virReportError(VIR_ERR_INTERNAL_ERROR,
>                        "%s", _("the interface uses a direct "
>                                "mode, but has no source dev"));
> -        goto cleanup;
> +        goto error;
>     }
> 
> -    netdef = network->def;
>     if (netdef->nForwardIfs == 0) {
>         virReportError(VIR_ERR_INTERNAL_ERROR,
>                        _("network '%s' uses a direct mode, but "
>                          "has no forward dev and no interface pool"),
>                        netdef->name);
> -        goto cleanup;
> +        goto error;
>     } else {
>         int ii;
>         virNetworkForwardIfDefPtr dev = NULL;
> @@ -3090,7 +3089,7 @@ networkNotifyActualDevice(virDomainNetDefPtr iface)
>             virReportError(VIR_ERR_INTERNAL_ERROR,
>                            _("network '%s' doesn't have dev='%s' in use by domain"),
>                            netdef->name, actualDev);
> -            goto cleanup;
> +            goto error;
>         }
> 
>         /* PASSTHROUGH mode, and PRIVATE Mode + 802.1Qbh both require
> @@ -3106,7 +3105,7 @@ networkNotifyActualDevice(virDomainNetDefPtr iface)
>             virReportError(VIR_ERR_INTERNAL_ERROR,
>                            _("network '%s' claims dev='%s' is already in use by a different domain"),
>                            netdef->name, actualDev);
> -            goto cleanup;
> +            goto error;
>         }
>         /* we are now assured of success, so mark the allocation */
>         dev->connections++;
> @@ -3114,8 +3113,9 @@ networkNotifyActualDevice(virDomainNetDefPtr iface)
>                   dev->dev, dev->connections);
>     }
> 
> -    ret = 0;
> cleanup:
> +    ret = 0;
> +error:
>     if (network)
>         virNetworkObjUnlock(network);
>     return ret;
> @@ -3136,7 +3136,7 @@ int
> networkReleaseActualDevice(virDomainNetDefPtr iface)
> {
>     struct network_driver *driver = driverState;
> -    virNetworkObjPtr network = NULL;
> +    virNetworkObjPtr network;
>     virNetworkDefPtr netdef;
>     const char *actualDev;
>     int ret = -1;
> @@ -3144,13 +3144,6 @@ networkReleaseActualDevice(virDomainNetDefPtr iface)
>     if (iface->type != VIR_DOMAIN_NET_TYPE_NETWORK)
>        return 0;
> 
> -    if (!iface->data.network.actual ||
> -        (virDomainNetGetActualType(iface) != VIR_DOMAIN_NET_TYPE_DIRECT)) {
> -        VIR_DEBUG("Nothing to release to network %s", iface->data.network.name);
> -        ret = 0;
> -        goto cleanup;
> -    }
> -
>     networkDriverLock(driver);
>     network = virNetworkFindByName(&driver->networks, iface->data.network.name);
>     networkDriverUnlock(driver);
> @@ -3158,6 +3151,13 @@ networkReleaseActualDevice(virDomainNetDefPtr iface)
>         virReportError(VIR_ERR_NO_NETWORK,
>                        _("no network with matching name '%s'"),
>                        iface->data.network.name);
> +        goto error;
> +    }
> +    netdef = network->def;
> +
> +    if (!iface->data.network.actual ||
> +        (virDomainNetGetActualType(iface) != VIR_DOMAIN_NET_TYPE_DIRECT)) {
> +        VIR_DEBUG("Nothing to release to network %s", iface->data.network.name);
>         goto cleanup;
>     }
> 
> @@ -3166,16 +3166,15 @@ networkReleaseActualDevice(virDomainNetDefPtr iface)
>         virReportError(VIR_ERR_INTERNAL_ERROR,
>                        "%s", _("the interface uses a direct "
>                                "mode, but has no source dev"));
> -        goto cleanup;
> +        goto error;
>     }
> 
> -    netdef = network->def;
>     if (netdef->nForwardIfs == 0) {
>         virReportError(VIR_ERR_INTERNAL_ERROR,
>                        _("network '%s' uses a direct mode, but "
>                          "has no forward dev and no interface pool"),
>                        netdef->name);
> -        goto cleanup;
> +        goto error;
>     } else {
>         int ii;
>         virNetworkForwardIfDefPtr dev = NULL;
> @@ -3191,7 +3190,7 @@ networkReleaseActualDevice(virDomainNetDefPtr iface)
>             virReportError(VIR_ERR_INTERNAL_ERROR,
>                            _("network '%s' doesn't have dev='%s' in use by domain"),
>                            netdef->name, actualDev);
> -            goto cleanup;
> +            goto error;
>         }
> 
>         dev->connections--;
> @@ -3199,8 +3198,9 @@ networkReleaseActualDevice(virDomainNetDefPtr iface)
>                   dev->dev, dev->connections);
>     }
> 
> -    ret = 0;
> cleanup:
> +    ret = 0;
> +error:
>     if (network)
>         virNetworkObjUnlock(network);
>     virDomainActualNetDefFree(iface->data.network.actual);
> @@ -3232,7 +3232,7 @@ networkGetNetworkAddress(const char *netname, char **netaddr)
> {
>     int ret = -1;
>     struct network_driver *driver = driverState;
> -    virNetworkObjPtr network = NULL;
> +    virNetworkObjPtr network;
>     virNetworkDefPtr netdef;
>     virNetworkIpDefPtr ipdef;
>     virSocketAddr addr;
> @@ -3247,7 +3247,7 @@ networkGetNetworkAddress(const char *netname, char **netaddr)
>         virReportError(VIR_ERR_NO_NETWORK,
>                        _("no network with matching name '%s'"),
>                        netname);
> -        goto cleanup;
> +        goto error;
>     }
>     netdef = network->def;
> 
> @@ -3289,17 +3289,17 @@ networkGetNetworkAddress(const char *netname, char **netaddr)
> 
>     if (dev_name) {
>         if (virNetDevGetIPv4Address(dev_name, &addr) < 0)
> -            goto cleanup;
> -
> +            goto error;
>         addrptr = &addr;
>     }
> 
> -    if (addrptr &&
> -        (*netaddr = virSocketAddrFormat(addrptr))) {
> -        ret = 0;
> +    if (!(addrptr &&
> +          (*netaddr = virSocketAddrFormat(addrptr)))) {
> +        goto error;
>     }
> 
> -cleanup:
> +    ret = 0;
> +error:
>     if (network)
>         virNetworkObjUnlock(network);
>     return ret;
> -- 
> 1.7.11.2
> 
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list





More information about the libvir-list mailing list