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

[Xen-devel] [PATCH 1 of 3] xl: Introduce shutdown xm compatibility option -a



  * Add missing option -a to shutdown all guest domains

Signed-off-by: Sander Eikelenboom <linux@xxxxxxxxxxxxxx>


---

Changed since v2:
  * fix error occuring when using both -a and -w options
    * Due to mixing local and global domid variable


Changed since v1:
  * address review comments.
    * Change shutdown_domain to take domid instead of domname
    * Docs: Make it more clear -a only shuts down GUEST domains

diff -r 9dc729b75595 -r 4c3d49787cea docs/man/xl.pod.1
--- a/docs/man/xl.pod.1 Mon Sep 03 11:22:02 2012 +0100
+++ b/docs/man/xl.pod.1 Thu Sep 06 21:36:14 2012 +0200
@@ -527,7 +527,7 @@ List specifically for that domain. Other
 
 =back
 
-=item B<shutdown> [I<OPTIONS>] I<domain-id>
+=item B<shutdown> [I<OPTIONS>] I<-a|domain-id>
 
 Gracefully shuts down a domain.  This coordinates with the domain OS
 to perform graceful shutdown, so there is no guarantee that it will
@@ -550,6 +550,10 @@ B<OPTIONS>
 
 =over 4
 
+=item B<-a>
+
+-a  Shutdown all guest domains.  Often used when doing a complete shutdown of 
a Xen system.
+
 =item B<-w>
 
 Wait for the domain to complete shutdown before returning.
diff -r 9dc729b75595 -r 4c3d49787cea tools/libxl/xl_cmdimpl.c
--- a/tools/libxl/xl_cmdimpl.c  Mon Sep 03 11:22:02 2012 +0100
+++ b/tools/libxl/xl_cmdimpl.c  Thu Sep 06 21:36:14 2012 +0200
@@ -2683,13 +2683,14 @@ static void destroy_domain(const char *p
     if (rc) { fprintf(stderr,"destroy failed (rc=%d)\n",rc); exit(-1); }
 }
 
-static void shutdown_domain(const char *p, int wait, int fallback_trigger)
+static void shutdown_domain(uint32_t domain_id, int wait, int fallback_trigger)
 {
     int rc;
     libxl_event *event;
 
-    find_domain(p);
-    rc=libxl_domain_shutdown(ctx, domid);
+    domid = domain_id;
+    rc = libxl_domain_shutdown(ctx, domid);
+
     if (rc == ERROR_NOPARAVIRT) {
         if (fallback_trigger) {
             fprintf(stderr, "PV control interface not available:"
@@ -3670,14 +3671,19 @@ int main_destroy(int argc, char **argv)
 
 int main_shutdown(int argc, char **argv)
 {
-    int opt;
+    libxl_dominfo *dominfo;
+    int opt, i, nb_domain;
+    int all = 0;
     int wait = 0;
     int fallback_trigger = 0;
 
-    while ((opt = def_getopt(argc, argv, "wF", "shutdown", 1)) != -1) {
+    while ((opt = def_getopt(argc, argv, "awF", "shutdown", 0)) != -1) {
         switch (opt) {
         case 0: case 2:
             return opt;
+        case 'a':
+            all = 1;
+            break;
         case 'w':
             wait = 1;
             break;
@@ -3687,7 +3693,30 @@ int main_shutdown(int argc, char **argv)
         }
     }
 
-    shutdown_domain(argv[optind], wait, fallback_trigger);
+    if (!argv[optind] && !all) {
+        fprintf(stderr, "You must specify -a or a domain id.\n\n");
+        return opt;
+    }
+
+    if (all) {
+        if (!(dominfo = libxl_list_domain(ctx, &nb_domain))) {
+            fprintf(stderr, "libxl_list_domain failed.\n");
+            return -1;
+        }
+
+        for (i = 0; i<nb_domain; i++) {
+            if (dominfo[i].domid == 0)
+                continue;
+
+            shutdown_domain(dominfo[i].domid, wait, fallback_trigger);
+        }
+
+        libxl_dominfo_list_free(dominfo, nb_domain);
+    } else {
+        find_domain(argv[optind]);
+        shutdown_domain(domid, wait, fallback_trigger);
+    }
+
     return 0;
 }
 
diff -r 9dc729b75595 -r 4c3d49787cea tools/libxl/xl_cmdtable.c
--- a/tools/libxl/xl_cmdtable.c Mon Sep 03 11:22:02 2012 +0100
+++ b/tools/libxl/xl_cmdtable.c Thu Sep 06 21:36:14 2012 +0200
@@ -60,7 +60,8 @@ struct cmd_spec cmd_table[] = {
     { "shutdown",
       &main_shutdown, 0, 1,
       "Issue a shutdown signal to a domain",
-      "[options] <Domain>",
+      "[options] <-a|Domain>",
+      "-a                      Shutdown all guest domains.\n"
       "-h                      Print this help.\n"
       "-F                      Fallback to ACPI power event for HVM guests 
with\n"
       "                        no PV drivers.\n"

_______________________________________________
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®.