[libvirt] [PATCH] Fix regressions BlockStats/Info APIs in QEMU driver
Daniel P. Berrange
berrange at redhat.com
Fri Jun 3 13:55:31 UTC 2011
On Thu, Jun 02, 2011 at 01:27:46PM -0600, Eric Blake wrote:
> On 06/02/2011 10:03 AM, Daniel P. Berrange wrote:
> > From: "Daniel P. Berrange" <berrange at redhat.com>
> >
> > The change 18c2a592064d69499f70428e498f4a3cb5161cda caused
> > some regressions in behaviour of virDomainBlockStats
> > and virDomainBlockInfo in the QEMU driver.
> >
> > The virDomainBlockInfo API stopped working for inactive
> > guests if querying a block device.
> >
> > The virDomainBlockStats API did not promptly report
> > an error if the guest was not running in some cases.
> >
> > * src/qemu/qemu_driver.c: Fix inactive guest handling
> > in BlockStats/Info APIs
> > ---
> > src/qemu/qemu_driver.c | 17 +++++++++++------
> > 1 files changed, 11 insertions(+), 6 deletions(-)
> >
> > @@ -6017,10 +6024,9 @@ static int qemuDomainGetBlockInfo(virDomainPtr dom,
> > if (qemuDomainObjBeginJob(vm) < 0)
> > goto cleanup;
> >
> > - if (!virDomainObjIsActive(vm)) {
> > - qemuReportError(VIR_ERR_OPERATION_INVALID,
> > - "%s", _("domain is not running"));
> > - goto endjob;
> > + if (virDomainObjIsActive(vm)) {
> > + ret = 0;
> > + goto cleanup;
>
> Oops - you lost the ! in that conditional. Also, 'goto cleanup' forgets
> to end the job condition that we hold. The real answer is that if the
> domain is not active, we set ret to 0 and short-circuit the attempt to
> query the guest.
>
> Conditional ACK if you change this hunk to be:
>
> if (!virDomainObjIsActive(vm)) {
> ret = 0;
> if (qemuDomainObjEndJob(vm) == 0)
> vm = NULL;
> goto cleanup;
> }
We can actually remove the goto entirely, so I changed
it to this:
if (qemuDomainObjBeginJob(vm) < 0)
goto cleanup;
if (virDomainObjIsActive(vm)) {
qemuDomainObjEnterMonitor(vm);
ret = qemuMonitorGetBlockExtent(priv->mon,
disk->info.alias,
&info->allocation);
qemuDomainObjExitMonitor(vm);
} else {
ret = 0;
}
if (qemuDomainObjEndJob(vm) == 0)
vm = NULL;
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list