[libvirt] [PATCH 1/2] qemu: using correct function to reboot guest.

From: Xu He Jie <xuhj@linux.vnet.ibm.com> Signed-off-by: Xu He Jie <xuhj@linux.vnet.ibm.com> --- src/qemu/qemu_driver.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index f4ee4c3..b0c9c02 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -1567,7 +1567,7 @@ static int qemuDomainReboot(virDomainPtr dom, unsigned int flags) { } qemuDomainObjEnterMonitor(driver, vm); - ret = qemuMonitorSystemPowerdown(priv->mon); + ret = qemuMonitorSystemReset(priv->mon); qemuDomainObjExitMonitor(driver, vm); priv->fakeReboot = true; -- 1.7.4.1

From: Xu He Jie <xuhj@linux.vnet.ibm.com> Signed-off-by: Xu He Jie <xuhj@linux.vnet.ibm.com> --- src/qemu/qemu_driver.c | 41 ++++++++++++++--------------------------- 1 files changed, 14 insertions(+), 27 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index b0c9c02..ee98662 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -1535,11 +1535,7 @@ static int qemuDomainReboot(virDomainPtr dom, unsigned int flags) { struct qemud_driver *driver = dom->conn->privateData; virDomainObjPtr vm; int ret = -1; -#if HAVE_YAJL qemuDomainObjPrivatePtr priv; -#endif - - virCheckFlags(0, -1); qemuDriverLock(driver); vm = virDomainFindByUUID(&driver->domains, dom->uuid); @@ -1553,35 +1549,26 @@ static int qemuDomainReboot(virDomainPtr dom, unsigned int flags) { goto cleanup; } -#if HAVE_YAJL priv = vm->privateData; - if (qemuCapsGet(priv->qemuCaps, QEMU_CAPS_MONITOR_JSON)) { - if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0) - goto cleanup; + if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0) + goto cleanup; - if (!virDomainObjIsActive(vm)) { - qemuReportError(VIR_ERR_OPERATION_INVALID, - "%s", _("domain is not running")); - goto endjob; - } + if (!virDomainObjIsActive(vm)) { + qemuReportError(VIR_ERR_OPERATION_INVALID, + "%s", _("domain is not running")); + goto endjob; + } - qemuDomainObjEnterMonitor(driver, vm); - ret = qemuMonitorSystemReset(priv->mon); - qemuDomainObjExitMonitor(driver, vm); + qemuDomainObjEnterMonitor(driver, vm); + ret = qemuMonitorSystemReset(priv->mon); + qemuDomainObjExitMonitor(driver, vm); - priv->fakeReboot = true; + priv->fakeReboot = false; - endjob: - if (qemuDomainObjEndJob(driver, vm) == 0) - vm = NULL; - } else { -#endif - qemuReportError(VIR_ERR_OPERATION_INVALID, "%s", - _("Reboot is not supported without the JSON monitor")); -#if HAVE_YAJL - } -#endif +endjob: + if (qemuDomainObjEndJob(driver, vm) == 0) + vm = NULL; cleanup: if (vm) -- 1.7.4.1

On Wed, Sep 21, 2011 at 05:53:31PM +0800, xuhj@linux.vnet.ibm.com wrote:
From: Xu He Jie <xuhj@linux.vnet.ibm.com>
Signed-off-by: Xu He Jie <xuhj@linux.vnet.ibm.com> --- src/qemu/qemu_driver.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index f4ee4c3..b0c9c02 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -1567,7 +1567,7 @@ static int qemuDomainReboot(virDomainPtr dom, unsigned int flags) { }
qemuDomainObjEnterMonitor(driver, vm); - ret = qemuMonitorSystemPowerdown(priv->mon); + ret = qemuMonitorSystemReset(priv->mon); qemuDomainObjExitMonitor(driver, vm);
priv->fakeReboot = true;
NACK. The virDomainReboot() API semantics are to perform a *graceful* reboot of the guest. ie, the guest OS shuts down normally, and then does a warm reboot of the virtual machine. The system_reset monitor command does an *immediate* reset of the virtual machine, without any guest shutdown. If you want to expose this capability, then it should be done via a new API. virDomainReset(), or by adding a new flag like VIR_DOMAIN_REBOOT_IMMEDIATE to the existing API. Regards, 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 :|

I got that mean. Thanks for your reply! On 2011年09月21日 18:27, Daniel P. Berrange wrote:
On Wed, Sep 21, 2011 at 05:53:31PM +0800, xuhj@linux.vnet.ibm.com wrote:
From: Xu He Jie<xuhj@linux.vnet.ibm.com>
Signed-off-by: Xu He Jie<xuhj@linux.vnet.ibm.com> --- src/qemu/qemu_driver.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index f4ee4c3..b0c9c02 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -1567,7 +1567,7 @@ static int qemuDomainReboot(virDomainPtr dom, unsigned int flags) { }
qemuDomainObjEnterMonitor(driver, vm); - ret = qemuMonitorSystemPowerdown(priv->mon); + ret = qemuMonitorSystemReset(priv->mon); qemuDomainObjExitMonitor(driver, vm);
priv->fakeReboot = true; NACK.
The virDomainReboot() API semantics are to perform a *graceful* reboot of the guest. ie, the guest OS shuts down normally, and then does a warm reboot of the virtual machine.
The system_reset monitor command does an *immediate* reset of the virtual machine, without any guest shutdown.
If you want to expose this capability, then it should be done via a new API. virDomainReset(), or by adding a new flag like VIR_DOMAIN_REBOOT_IMMEDIATE to the existing API.
Regards, Daniel
participants (3)
-
Daniel P. Berrange
-
Xu He Jie
-
xuhj@linux.vnet.ibm.com