aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docs/man/xl.pod.16
-rw-r--r--tools/libxl/xl_cmdimpl.c20
-rw-r--r--tools/libxl/xl_cmdtable.c3
3 files changed, 21 insertions, 8 deletions
diff --git a/docs/man/xl.pod.1 b/docs/man/xl.pod.1
index 64a118e607..5975d7b646 100644
--- a/docs/man/xl.pod.1
+++ b/docs/man/xl.pod.1
@@ -504,7 +504,7 @@ Pass VNC password to vncviewer via stdin.
Saves a running domain to a state file so that it can be restored
later. Once saved, the domain will no longer be running on the
-system, unless the -c option is used.
+system, unless the -c or -p options are used.
B<xl restore> restores from this checkpoint file.
Passing a config file argument allows the user to manually select the VM config
file used to create the domain.
@@ -515,6 +515,10 @@ file used to create the domain.
Leave domain running after creating the snapshot.
+=item B<-p>
+
+Leave domain paused after creating the snapshot.
+
=back
=item B<sharing> [I<domain-id>]
diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
index d365f904c0..4a8feaf65d 100644
--- a/tools/libxl/xl_cmdimpl.c
+++ b/tools/libxl/xl_cmdimpl.c
@@ -3266,7 +3266,7 @@ static void save_domain_core_writeconfig(int fd, const char *source,
}
static int save_domain(uint32_t domid, const char *filename, int checkpoint,
- const char *override_config_file)
+ int leavepaused, const char *override_config_file)
{
int fd;
uint8_t *config_data;
@@ -3290,11 +3290,15 @@ static int save_domain(uint32_t domid, const char *filename, int checkpoint,
int rc = libxl_domain_suspend(ctx, domid, fd, 0, NULL);
close(fd);
- if (rc < 0)
+ if (rc < 0) {
fprintf(stderr, "Failed to save domain, resuming domain\n");
-
- if (checkpoint || rc < 0)
libxl_domain_resume(ctx, domid, 1, 0);
+ }
+ else if (leavepaused || checkpoint) {
+ if (leavepaused)
+ libxl_domain_pause(ctx, domid);
+ libxl_domain_resume(ctx, domid, 1, 0);
+ }
else
libxl_domain_destroy(ctx, domid, 0);
@@ -3838,12 +3842,16 @@ int main_save(int argc, char **argv)
const char *filename;
const char *config_filename = NULL;
int checkpoint = 0;
+ int leavepaused = 0;
int opt;
- SWITCH_FOREACH_OPT(opt, "c", NULL, "save", 2) {
+ SWITCH_FOREACH_OPT(opt, "cp", NULL, "save", 2) {
case 'c':
checkpoint = 1;
break;
+ case 'p':
+ leavepaused = 1;
+ break;
}
if (argc-optind > 3) {
@@ -3856,7 +3864,7 @@ int main_save(int argc, char **argv)
if ( argc - optind >= 3 )
config_filename = argv[optind + 2];
- save_domain(domid, filename, checkpoint, config_filename);
+ save_domain(domid, filename, checkpoint, leavepaused, config_filename);
return 0;
}
diff --git a/tools/libxl/xl_cmdtable.c b/tools/libxl/xl_cmdtable.c
index 44b42b0311..326a6606e0 100644
--- a/tools/libxl/xl_cmdtable.c
+++ b/tools/libxl/xl_cmdtable.c
@@ -142,7 +142,8 @@ struct cmd_spec cmd_table[] = {
"Save a domain state to restore later",
"[options] <Domain> <CheckpointFile> [<ConfigFile>]",
"-h Print this help.\n"
- "-c Leave domain running after creating the snapshot."
+ "-c Leave domain running after creating the snapshot.\n"
+ "-p Leave domain paused after creating the snapshot."
},
{ "migrate",
&main_migrate, 0, 1,