[libvirt] [PATCH V4 6/6] libxlDomainStart: correct cleanup after failure
Chun Yan Liu
cyliu at suse.com
Tue Mar 29 01:37:41 UTC 2016
>>> On 3/29/2016 at 09:00 AM, in message <56F9D3C0.7020907 at suse.com>, Jim Fehlig
<jfehlig at suse.com> wrote:
> On 03/21/2016 02:11 AM, Chunyan Liu wrote:
> > Functions like libxlNetworkPrepareDevices, libxlBuildDomainConfig,
> > virHostdevPrepareDomainDevices will allocate and reserve some
> > resources. In libxlDomainStart, after calling these functions,
> > in case of failure, we need to call libxlDomainCleanup to check
> > and release resoureces.
> > Besides, since libxlDomainCleanup will call virDomainLockProcessPause,
> > so we move virDomainLockProcessStart/Resume to earlier stage.
>
> I think this cleanup should be done before applying 4/6. It is really
> independent of support for vf from an SR-IOV pool.
>
> >
> > Signed-off-by: Chunyan Liu <cyliu at suse.com>
> > ---
> > src/libxl/libxl_domain.c | 41 ++++++++++++++++++++++-------------------
> > 1 file changed, 22 insertions(+), 19 deletions(-)
> >
> > diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c
> > index d11bf3a..6855ce4 100644
> > --- a/src/libxl/libxl_domain.c
> > +++ b/src/libxl/libxl_domain.c
> > @@ -1083,20 +1083,13 @@ libxlDomainStart(libxlDriverPrivatePtr driver,
> virDomainObjPtr vm,
> > vm, true) < 0)
> > goto cleanup;
> >
> > - if (libxlNetworkPrepareDevices(vm->def) < 0)
> > - goto cleanup;
> > -
> > - if (libxlBuildDomainConfig(driver->reservedGraphicsPorts, vm->def,
> > - cfg->ctx, &d_config) < 0)
> > - goto cleanup;
> > -
> > - if (cfg->autoballoon && libxlDomainFreeMem(cfg->ctx, &d_config) < 0)
> > - goto cleanup;
> > -
> > - if (virHostdevPrepareDomainDevices(hostdev_mgr, LIBXL_DRIVER_NAME,
> > - vm->def, VIR_HOSTDEV_SP_PCI) < 0)
> > - goto cleanup;
> > -
> > + /* libxlNetworkPrepareDevices, libxlBuildDomainConfig,
> > + * virHostdevPrepareDomainDevices will allocate and reserve
> > + * some resources. In case of failure, need to release
> > + * resoureces. This can be done by calling libxlDomainCleanup.
> > + * Since libxlDomainCleanup will call virDomainLockProcessPause,
> > + * so we move virDomainLockProcessStart/Resume to here.
> > + */
>
> I don't think the comment is necessary. Without looking at git history, one
> wouldn't know where it was moved from :-).
>
> > if (virDomainLockProcessStart(driver->lockManager,
> > "xen:///system",
> > vm,
> > @@ -1111,6 +1104,20 @@ libxlDomainStart(libxlDriverPrivatePtr driver,
> virDomainObjPtr vm,
> > goto cleanup;
> > VIR_FREE(priv->lockState);
> >
> > + if (libxlNetworkPrepareDevices(vm->def) < 0)
> > + goto release_dom;
> > +
> > + if (libxlBuildDomainConfig(driver->reservedGraphicsPorts, vm->def,
> > + cfg->ctx, &d_config) < 0)
> > + goto release_dom;
> > +
> > + if (cfg->autoballoon && libxlDomainFreeMem(cfg->ctx, &d_config) < 0)
> > + goto release_dom;
> > +
> > + if (virHostdevPrepareDomainDevices(hostdev_mgr, LIBXL_DRIVER_NAME,
> > + vm->def, VIR_HOSTDEV_SP_PCI) < 0)
> > + goto release_dom;
> > +
> > /* Unlock virDomainObj while creating the domain */
> > virObjectUnlock(vm);
> >
> > @@ -1194,16 +1201,12 @@ libxlDomainStart(libxlDriverPrivatePtr driver,
> virDomainObjPtr vm,
> >
> > cleanup_dom:
> > ret = -1;
> > - if (priv->deathW) {
> > - libxl_evdisable_domain_death(cfg->ctx, priv->deathW);
> > - priv->deathW = NULL;
> > - }
>
> Disabling the death event should be done in another patch IMO, after adding
> the
> call to libxlDomainCleanup.
>
> > libxlDomainDestroyInternal(driver, vm);
> > vm->def->id = -1;
> > virDomainObjSetState(vm, VIR_DOMAIN_SHUTOFF,
> VIR_DOMAIN_SHUTOFF_FAILED);
> >
> > release_dom:
> > - virDomainLockProcessPause(driver->lockManager, vm, &priv->lockState);
> > + libxlDomainCleanup(driver, vm);
>
> release_dom is not the best name for the label after this change. I've split
> this patch into 3 patches and posted the result
>
> https://www.redhat.com/archives/libvir-list/2016-March/msg01310.html
Reviewed the split 3 patches, looks good.
Thanks Jim!
>
> Can you review and comment on that series? As mentioned above, I'd like to
> get
> the resource leaks plugged in libxlDomainStart before adding 4/6.
>
> Regards,
> Jim
>
>
More information about the libvir-list
mailing list