[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] xl save but leave domain paused
On 03/07/2013 00:34, Ian Murray wrote: > 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@xxxxxxxxxxx> > --- > tools/libxl/xl_cmdimpl.c | 16 ++++++++++++---- > tools/libxl/xl_cmdtable.c | 4 +++- > 2 files changed, 15 insertions(+), 5 deletions(-) > > diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c > index 8a478ba..670620b 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) #include <stdbool.h> and use bool rather than int. Also, re-align the second line arguments which was misaligned when the function was made static > { > int fd; > uint8_t *config_data; > @@ -3293,8 +3293,12 @@ static int save_domain(uint32_t domid, const char > *filename, int checkpoint, > if (rc < 0) > fprintf(stderr, "Failed to save domain, resuming domain\n"); > > - if (checkpoint || rc < 0) > + if (leavepaused || checkpoint || rc < 0) { > + if (leavepaused && !(rc < 0)) { > + libxl_domain_pause(ctx, domid); > + } > libxl_domain_resume(ctx, domid, 1, 0); > + } This logic is quite opaque. It would be clearer to have if (leavepaused && rc == 0) pause() else if (checkpoint ... > 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 44b42b0..c429cea 100644 > --- a/tools/libxl/xl_cmdtable.c > +++ b/tools/libxl/xl_cmdtable.c > @@ -142,7 +142,9 @@ 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." > + Needless whitespace > }, > { "migrate", > &main_migrate, 0, 1, Can you also patch the manpage, docs/man/xl.pod.1 to the same effect ~Andrew _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |