[libvirt] [PATCH] Support reboots with the QEMU driver

Wen Congyang wency at cn.fujitsu.com
Mon Jun 20 07:19:27 UTC 2011


At 06/17/2011 09:26 PM, Daniel P. Berrange Write:
> On Fri, Jun 17, 2011 at 10:52:03AM +0800, Wen Congyang wrote:
>> At 06/16/2011 01:06 AM, Daniel P. Berrange Write:
>>> +
>>> +
>>>  static int
>>>  qemuProcessHandleShutdown(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
>>>                            virDomainObjPtr vm)
>>>  {
>>> +    qemuDomainObjPrivatePtr priv = vm->privateData;
>>
>> I think we should get vm->privateData after we lock vm.
> 
> Yep, good point.
> 
>>
>>> +    VIR_DEBUG("vm=%p", vm);
>>> +
>>>      virDomainObjLock(vm);
>>> -    ((qemuDomainObjPrivatePtr) vm->privateData)->gotShutdown = true;
>>> +    priv->gotShutdown = true;
>>> +    if (priv->fakeReboot) {
>>> +        virDomainObjRef(vm);
>>> +        virThread th;
>>> +        if (virThreadCreate(&th,
>>> +                            false,
>>> +                            qemuProcessFakeReboot,
>>> +                            vm) < 0) {
>>> +            VIR_ERROR("Failed to create reboot thread, killing domain");
>>> +            qemuProcessKill(vm);
>>
>> We should hold an extra reference the vm here. If the vm is not persistent
>> and we destroy the vm before the thread runs, libvirtd may crash(I think, not test
>> it).
> 
> I'm already taking an extra reference just before starting the
> thread. I need to release that actually in virThreadCreate fails
> to run.

Ah, yes, you have already taken an extrareference.

Another question:
I reboot and migrate domain like this:
# virsh reboot vm1; virsh migrate vm1 --p2p qemu+tls://<dest host>/system

When the domain is migrated to the dested, it isnot rebooted, but shut down.

I think we should continue reboot after migration.

> 
>>
>>> +        }
>>> +    } else {
>>> +        qemuProcessKill(vm);
>>> +    }
>>>      virDomainObjUnlock(vm);
>>>  
>>>      return 0;
> 
> Daiel




More information about the libvir-list mailing list