[libvirt] [PATCH v2 1/3] networkStartNetwork: Be more verbose
Laine Stump
laine at laine.org
Fri Feb 7 12:07:25 UTC 2014
On 02/05/2014 12:11 PM, Michal Privoznik wrote:
> The lack of debug printings might be frustrating in the future.
> Moreover, this function doesn't follow the usual pattern we have in the
> rest of the code:
>
> int ret = -1;
> /* do some work */
> ret = 0;
> cleanup:
> /* some cleanup work */
> return ret;
>
> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
> ---
> src/network/bridge_driver.c | 35 +++++++++++++++++++----------------
> 1 file changed, 19 insertions(+), 16 deletions(-)
>
> diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
> index c8b167b..2bd015b 100644
> --- a/src/network/bridge_driver.c
> +++ b/src/network/bridge_driver.c
> @@ -1992,23 +1992,29 @@ static int
> networkStartNetwork(virNetworkDriverStatePtr driver,
> virNetworkObjPtr network)
> {
> - int ret = 0;
> + int ret = -1;
> +
> + VIR_DEBUG("driver=%p, network=%p", driver, network);
>
> if (virNetworkObjIsActive(network)) {
> virReportError(VIR_ERR_OPERATION_INVALID,
> "%s", _("network is already active"));
> - return -1;
> + return ret;
Okay, this fixes the one problem I saw with v1 (calling
UnsetDefTransient on cleanup for a network that was already active).
> }
>
> + VIR_DEBUG("Beginning network startup process");
> +
> + VIR_DEBUG("Setting current network def as transient");
> if (virNetworkObjSetDefTransient(network, true) < 0)
> - return -1;
> + goto cleanup;
I *think* it's safe to call UnsetDefTransient when SetDefTransient
failed, so this is probably okay. And the rest of cleanup (which is
mostly just a call to networkShutdownNetwork(), after saving any errors)
is safe as well - it's a NOP if the network isn't active.
ACK.
>
> switch (network->def->forward.type) {
>
> case VIR_NETWORK_FORWARD_NONE:
> case VIR_NETWORK_FORWARD_NAT:
> case VIR_NETWORK_FORWARD_ROUTE:
> - ret = networkStartNetworkVirtual(driver, network);
> + if (networkStartNetworkVirtual(driver, network) < 0)
> + goto cleanup;
> break;
>
> case VIR_NETWORK_FORWARD_BRIDGE:
> @@ -2016,28 +2022,25 @@ networkStartNetwork(virNetworkDriverStatePtr driver,
> case VIR_NETWORK_FORWARD_VEPA:
> case VIR_NETWORK_FORWARD_PASSTHROUGH:
> case VIR_NETWORK_FORWARD_HOSTDEV:
> - ret = networkStartNetworkExternal(driver, network);
> + if (networkStartNetworkExternal(driver, network) < 0)
> + goto cleanup;
> break;
> }
>
> - if (ret < 0) {
> - virNetworkObjUnsetDefTransient(network);
> - return ret;
> - }
> -
> /* Persist the live configuration now that anything autogenerated
> * is setup.
> */
> - if ((ret = virNetworkSaveStatus(driverState->stateDir,
> - network)) < 0) {
> - goto error;
> - }
> + VIR_DEBUG("Writing network status to disk");
> + if (virNetworkSaveStatus(driverState->stateDir, network) < 0)
> + goto cleanup;
>
> - VIR_INFO("Starting up network '%s'", network->def->name);
> network->active = 1;
> + VIR_INFO("Network '%s' started up", network->def->name);
> + ret = 0;
>
> -error:
> +cleanup:
> if (ret < 0) {
> + virNetworkObjUnsetDefTransient(network);
> virErrorPtr save_err = virSaveLastError();
> int save_errno = errno;
> networkShutdownNetwork(driver, network);
More information about the libvir-list
mailing list