aboutsummaryrefslogtreecommitdiffstats
path: root/tools/libxl
diff options
context:
space:
mode:
authorIan Murray <murrayie@yahoo.co.uk>2013-07-04 00:58:27 +0100
committerIan Campbell <ian.campbell@citrix.com>2013-07-17 10:39:22 +0100
commit4d1759b5153ce5b0903e56fefcfdca8a03b7c246 (patch)
tree1333cbf2a1c7a7418df2337009fc8fba520fdde1 /tools/libxl
parentb179c6c490ca3e3baf1ce58ecb7f87f2a8df6049 (diff)
downloadxen-4d1759b5153ce5b0903e56fefcfdca8a03b7c246.tar.gz
xen-4d1759b5153ce5b0903e56fefcfdca8a03b7c246.tar.bz2
xen-4d1759b5153ce5b0903e56fefcfdca8a03b7c246.zip
xl: support for leaving domain paused after save
New feature to allow xl save to leave a domain paused after its memory has been saved. This is to allow disk snapshots of domU to be taken that exactly correspond to the memory state at save time. Once the snapshot(s) have been taken or whatever, the domain can be unpaused in the usual manner. Usage: xl save -p <domid> <filespec> Signed-off-by: Ian Murray <murrayie@yahoo.co.uk> Acked-by: Ian Campbell <ian.campbell@citrix.com>
Diffstat (limited to 'tools/libxl')
-rw-r--r--tools/libxl/xl_cmdimpl.c20
-rw-r--r--tools/libxl/xl_cmdtable.c3
2 files changed, 16 insertions, 7 deletions
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,