[PATCH v1 2/2] qemu_process: continue to process fakereboot after restarting libvirtd

Michal Prívozník mprivozn at redhat.com
Wed Nov 10 13:41:55 UTC 2021


On 11/10/21 2:25 PM, Bihong Yu wrote:
> 
> 
> On 2021/11/10 17:32, Michal Prívozník wrote:
>> On 10/25/21 11:04 AM, Bihong Yu wrote:
>>> During the vm rebooting, the vm could be paused if the libvirtd is
>>> restarted for some reason, which is not expected. We need continue
>>> fakereboot process if fakereboot flags is true and the vm is in
>>> paused-user status.
>>>
>>> Signed-off-by: Bihong Yu <yubihong at huawei.com>
>>> ---
>>>  src/qemu/qemu_process.c | 10 ++++++----
>>>  1 file changed, 6 insertions(+), 4 deletions(-)
>>>
>>> diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
>>> index 832ce164fb..a758b96fa6 100644
>>> --- a/src/qemu/qemu_process.c
>>> +++ b/src/qemu/qemu_process.c
>>> @@ -8742,13 +8742,15 @@ qemuProcessReconnect(void *opaque)
>>>          goto error;
>>>      }
>>>  
>>> -    /* In case the domain shutdown while we were not running,
>>> -     * we need to finish the shutdown process. And we need to do it after
>>> -     * we have virQEMUCaps filled in.
>>> +    /* In case the domain shutdown or fake reboot while we were not running,
>>> +     * we need to finish the shutdown or fake reboot process. And we need to
>>> +     * do it after we have virQEMUCaps filled in.
>>>       */
>>>      if (state == VIR_DOMAIN_SHUTDOWN ||
>>>          (state == VIR_DOMAIN_PAUSED &&
>>> -         reason == VIR_DOMAIN_PAUSED_SHUTTING_DOWN)) {
>>> +         reason == VIR_DOMAIN_PAUSED_SHUTTING_DOWN) ||
>>> +        (priv->fakeReboot && state == VIR_DOMAIN_PAUSED &&
>>> +         reason == VIR_DOMAIN_PAUSED_USER)) {
>>
>> One thing that I don't quite understand is why this new condition checks
>> for state or reason. I could understand the reason a bit (because domain
>> is paused after SHUTDOWN event), but the reason? Can you elaborate please?
> 
> Hi, Michal. Thank you for your reply.
>   The reason is that: while libvirt reboot vm with ACPI mode, the vm will
> undergo the following state changes:
> 	running -> shutdown -> prelaunch -> running
>   If libvirtd reboot after vm prelaunch status and before vm running status,
> the qemuProcessUpdateState() will update the vm status to 'VIR_DOMAIN_PAUSED'
> and reason to 'VIR_DOMAIN_PAUSED_USER' according to the qemuMonitorGetStatus()
> returning result in qemuProcessReconnect().
>   So, we need to recognize this scenario and continue to finish rebooting
> process.

Ah, you are correct. I've missed that.

Reviewed-by: Michal Privoznik <mprivozn at redhat.com>

Michal




More information about the libvir-list mailing list