[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] libxl: a domain can be dying but not shutdown



> The shutdown code is only present if the domain is shutdown.
> If we attempt to extract it from the flags from a dying but not shutdown
> domain then we get values like '255' which is not a valid
> LIBXL_SHUTDOWN_REASON_. We should use LIBXL_SHUTDOWN_UNKNOWN in this case.

Without this patch, basic XenServer tests failed intermittently due to the fact 
that the shutdown_reason had an invalid value (a value not in the enum defined 
in the IDL). The failure happened during a "hard shutdown", which translates to 
a  "destroy domain". With Dave's patch, the shutdown_reason became UNKNOWN in 
this case, and all was fine.

Acked-by: Rob Hoes <rob.hoes@xxxxxxxxxx>

> Signed-off-by: David Scott <dave.scott@xxxxxxxxxx>
> 
> ---
> 
> This can be tested by running 2 domUs, and having one map pages from the
> other. I used a vchan connection, so I had a vchan_server granting pages
> and a vchan_client mapping them. I made sure the client is never going to
> unmap the pages (I used 'sleep' in a Mirage kernel but 'xl pause' from
> outside would probably also work) and then I 'xl destroyed' the server.
> The server domain ends up stuck in the dying state because the client
> still has a page mapped. The server domain is not shutdown.
> 
> According to 'xl list':
> 
> djs@st20:~/djs55/list$ sudo xl list
> Name                                        ID   Mem VCPUs      State
> Time(s)
> Domain-0                                     0  5278     6     r-----
> 10971.2
> fedora                                      12  2048     1     -b----
> 5470.0
> (null)                                      21     0     1     -bp--d
> 25.1
> vchan_client                                22   256     1     -b----
> 0.0
> 
> and according to my test program which calls libxl_list_domain:
> 
> domain 0 shutdown = 0 dying = 0 shutdown_reason = -1 domain 12 shutdown =
> 0 dying = 0 shutdown_reason = -1 domain 21 shutdown = 0 dying = 1
> shutdown_reason = 255 domain 22 shutdown = 0 dying = 0 shutdown_reason = -
> 1
> 
> I believe this also manifests transiently during a normal 'xl destroy'.
> 
> Cheers,
> Dave
> ---
>  tools/libxl/libxl.c |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c index
> 9c72df2..a2a29b1 100644
> --- a/tools/libxl/libxl.c
> +++ b/tools/libxl/libxl.c
> @@ -600,7 +600,7 @@ static void xcinfo2xlinfo(libxl_ctx *ctx,
>      xlinfo->blocked  = !!(xcinfo->flags&XEN_DOMINF_blocked);
>      xlinfo->running  = !!(xcinfo->flags&XEN_DOMINF_running);
> 
> -    if (xlinfo->shutdown || xlinfo->dying)
> +    if (xlinfo->shutdown)
>          xlinfo->shutdown_reason = (xcinfo-
> >flags>>XEN_DOMINF_shutdownshift) & XEN_DOMINF_shutdownmask;
>      else
>          xlinfo->shutdown_reason = LIBXL_SHUTDOWN_REASON_UNKNOWN;
> --
> 1.7.10.4


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.