[libvirt] [PATCH 1/2] add --crash support to "virsh dump"

Daniel P. Berrange berrange at redhat.com
Mon Nov 30 14:27:19 UTC 2009


On Mon, Nov 30, 2009 at 10:11:10AM +0100, Paolo Bonzini wrote:
> This patch adds the --crash option (already present in "xm dump-core")
> to "virsh dump".  virDomainCoreDump already has a flags argument, so
> the API/ABI is untouched.

> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index 92d4629..8e80144 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -3543,6 +3543,7 @@ static int qemudDomainCoreDump(virDomainPtr dom,
>      virDomainObjPtr vm;
>      int resume = 0, paused = 0;
>      int ret = -1, fd = -1;
> +    virDomainEventPtr event = NULL;
>      const char *args[] = {
>          "cat",
>          NULL,
> @@ -3633,10 +3634,17 @@ static int qemudDomainCoreDump(virDomainPtr dom,
>          goto endjob;
>  
>  endjob:
> +    if ((ret == 0) && (flags & VIR_DUMP_CRASH)) {
> +        qemudShutdownVMDaemon(dom->conn, driver, vm);
> +        event = virDomainEventNewFromObj(vm,
> +                                         VIR_DOMAIN_EVENT_STOPPED,
> +                                         VIR_DOMAIN_EVENT_STOPPED_CRASHED);
> +    }
> +

Shouldn't we be setting 'resume=0' here otherwise....

>      /* Since the monitor is always attached to a pty for libvirt, it
>         will support synchronous operations so we always get here after
>         the migration is complete.  */
> -    if (resume && paused) {
> +    else if (resume && paused) {
>          qemuDomainObjEnterMonitor(vm);
>          if (qemuMonitorStartCPUs(priv->mon, dom->conn) < 0) {
>              if (virGetLastError() == NULL)

....this will try to resume CPUs on a guest we just shutdown

> @@ -3647,12 +3655,19 @@ endjob:
>      }
>  
>      qemuDomainObjEndJob(vm);
> +    if ((ret == 0) && (flags & VIR_DUMP_CRASH) && !vm->persistent) {
> +        virDomainRemoveInactive(&driver->domains,
> +                                vm);
> +        vm = NULL;
> +    }
>  
>  cleanup:
>      if (ret != 0)
>          unlink(path);
>      if (vm)
>          virDomainObjUnlock(vm);
> +    if (event)
> +        qemuDomainEventQueue(driver, event);
>      return ret;
>  }
>  

Regards,
Daniel
-- 
|: Red Hat, Engineering, London   -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org  -o-  http://virt-manager.org  -o-  http://ovirt.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-  F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|




More information about the libvir-list mailing list