lkml.org 
[lkml]   [2013]   [Nov]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 2/4] xen/manage: Poweroff forcefully if user-space is not yet up.
    Date
    The user can launch the guest in this sequence:

    xl create -p /vm.cfg [launch, but pause it]
    xl shutdown latest [sets control/shutdown=poweroff]
    xl unpause latest
    xl console latest [and see that the guest has completely
    ignored the shutdown request]

    In reality the guest hasn't ignored it. It registers a watch
    and gets a notification that there is value. It then calls
    the shutdown_handler which ends up calling orderly_shutdown.

    Unfortunately that is so early in the bootup that there
    are no user-space. Which means that the orderly_shutdown fails.
    But since the force flag was set to false it continues on without
    reporting.

    We check if the system is still in the booting stage and if so
    enable the force option (which will shutdown in early bootup
    process). If in normal running case we don't force it.

    Fixes-Bug: http://bugs.xenproject.org/xen/bug/6
    Reported-by: Alex Bligh <alex@alex.org.uk>
    Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    [v2: Add switch statement]
    ---
    drivers/xen/manage.c | 13 ++++++++++++-
    1 file changed, 12 insertions(+), 1 deletion(-)

    diff --git a/drivers/xen/manage.c b/drivers/xen/manage.c
    index 624e8dc..3f8496c 100644
    --- a/drivers/xen/manage.c
    +++ b/drivers/xen/manage.c
    @@ -185,7 +185,18 @@ struct shutdown_handler {
    static void do_poweroff(void)
    {
    shutting_down = SHUTDOWN_POWEROFF;
    - orderly_poweroff(false);
    + switch (system_state) {
    + case SYSTEM_BOOTING:
    + orderly_poweroff(true);
    + break;
    + case SYSTEM_RUNNING:
    + orderly_poweroff(false);
    + break;
    + default:
    + /* Don't do it when we are halting/rebooting. */
    + pr_info("Ignoring Xen toolstack shutdown.\n");
    + break;
    + }
    }

    static void do_reboot(void)
    --
    1.8.3.1


    \
     
     \ /
      Last update: 2013-11-08 19:41    [W:4.790 / U:1.212 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site