|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v4 13/14] tools: don't stop xenstore domain when stopping dom0
When restarting or shutting down dom0 the xendomains script tries to
stop all other domains. Don't do this for the xenstore domain, as it
might survive a dom0 reboot in the future.
The same applies to xl shutdown --all. Here the xenstore domain is
flagged as "never stop".
Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
---
V4: don't reuse wait_for_it as a counter as requested by Ian Campbell
V3: xl shutdown modified to query the "never_stop" flag instead of
the xenstore domain id as requested by Ian Campbell
drop usage of xenstore-exists as requested by Ian Campbell
Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
---
tools/hotplug/Linux/xendomains.in | 15 +++++++++++++++
tools/libxl/xl_cmdimpl.c | 9 +++++----
2 files changed, 20 insertions(+), 4 deletions(-)
diff --git a/tools/hotplug/Linux/xendomains.in
b/tools/hotplug/Linux/xendomains.in
index dfe0b33..9f88649 100644
--- a/tools/hotplug/Linux/xendomains.in
+++ b/tools/hotplug/Linux/xendomains.in
@@ -196,6 +196,15 @@ rdnames()
done
}
+# get xenstore domain id (or 0 if no xenstore domain)
+get_xsdomid()
+{
+ XS_DOMID=`${bindir}/xenstore-read /tool/xenstored/domid 2>/dev/null`
+ if test $? -ne 0; then
+ XS_DOMID=0
+ fi
+}
+
LIST_GREP='(domain\|(domid\|(name\|^ {$\|"name":\|"domid":'
parseln()
{
@@ -216,12 +225,14 @@ parseln()
is_running()
{
+ get_xsdomid
rdname $1
RC=1
name=;id=
while read LN; do
parseln "$LN" || continue
if test $id = 0; then continue; fi
+ if test $id = $XS_DOMID; then continue; fi
case $name in
($NM)
RC=0
@@ -302,10 +313,12 @@ start()
all_zombies()
{
+ get_xsdomid
name=;id=
while read LN; do
parseln "$LN" || continue
if test $id = 0; then continue; fi
+ if test $id = $XS_DOMID; then continue; fi
if test "$state" != "-b---d" -a "$state" != "-----d"; then
return 1;
fi
@@ -351,11 +364,13 @@ stop()
if test "$XENDOMAINS_AUTO_ONLY" = "true"; then
rdnames
fi
+ get_xsdomid
echo -n "Shutting down Xen domains:"
name=;id=
while read LN; do
parseln "$LN" || continue
if test $id = 0; then continue; fi
+ if test $id = $XS_DOMID; then continue; fi
echo -n " $name"
if test "$XENDOMAINS_AUTO_ONLY" = "true"; then
eval "
diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
index f9933cb..25507c7 100644
--- a/tools/libxl/xl_cmdimpl.c
+++ b/tools/libxl/xl_cmdimpl.c
@@ -4820,7 +4820,7 @@ static int main_shutdown_or_reboot(int do_reboot, int
argc, char **argv)
libxl_evgen_domain_death **, libxl_ev_user, int) =
do_reboot ? &reboot_domain : &shutdown_domain;
int opt, i, nb_domain;
- int wait_for_it = 0, all =0;
+ int wait_for_it = 0, all = 0, nrdeathws = 0;
int fallback_trigger = 0;
static struct option opts[] = {
{"all", 0, 0, 'a'},
@@ -4857,14 +4857,15 @@ static int main_shutdown_or_reboot(int do_reboot, int
argc, char **argv)
deathws = calloc(nb_domain, sizeof(*deathws));
for (i = 0; i<nb_domain; i++) {
- if (dominfo[i].domid == 0)
+ if (dominfo[i].domid == 0 || dominfo[i].never_stop)
continue;
fn(dominfo[i].domid, deathws ? &deathws[i] : NULL, i,
fallback_trigger);
+ nrdeathws++;
}
- if (wait_for_it) {
- wait_for_domain_deaths(deathws, nb_domain - 1 /* not dom 0 */);
+ if (deathws) {
+ wait_for_domain_deaths(deathws, nrdeathws);
free(deathws);
}
--
2.6.2
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |