From 17ecbf8fed795c3d61b107b65200094ba259f14c Mon Sep 17 00:00:00 2001 From: Ian Campbell Date: Fri, 11 May 2012 18:59:02 +0100 Subject: [PATCH] libxl: add a dummy ao_how to libxl_domain_core_dump Although this function is not currently slow it may become so in the future (this also depends somewhat on the size of the guest). Therefore arrange for it to take an ao_how which it completes immediately. This will allow us to make it asynchronous in the future without breaking API compatibility. Signed-off-by: Ian Campbell Acked-by: Ian Jackson Committed-by: Ian Jackson --- tools/libxl/libxl.c | 18 ++++++++++++++---- tools/libxl/libxl.h | 4 +++- tools/libxl/xl_cmdimpl.c | 4 ++-- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c index d5fb186b41..482adaa6d7 100644 --- a/tools/libxl/libxl.c +++ b/tools/libxl/libxl.c @@ -642,16 +642,26 @@ int libxl_domain_pause(libxl_ctx *ctx, uint32_t domid) } int libxl_domain_core_dump(libxl_ctx *ctx, uint32_t domid, - const char *filename) + const char *filename, + const libxl_asyncop_how *ao_how) { - int ret; + AO_CREATE(ctx, domid, ao_how); + int ret, rc; + ret = xc_domain_dumpcore(ctx->xch, domid, filename); if (ret<0) { LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "core dumping domain %d to %s", domid, filename); - return ERROR_FAIL; + rc = ERROR_FAIL; + goto out; } - return 0; + + rc = 0; +out: + + libxl__ao_complete(egc, ao, rc); + + return AO_INPROGRESS; } int libxl_domain_unpause(libxl_ctx *ctx, uint32_t domid) diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h index 3087146ee6..d8dbb1e8c0 100644 --- a/tools/libxl/libxl.h +++ b/tools/libxl/libxl.h @@ -511,7 +511,9 @@ int libxl_domain_rename(libxl_ctx *ctx, uint32_t domid, int libxl_domain_pause(libxl_ctx *ctx, uint32_t domid); int libxl_domain_unpause(libxl_ctx *ctx, uint32_t domid); -int libxl_domain_core_dump(libxl_ctx *ctx, uint32_t domid, const char *filename); +int libxl_domain_core_dump(libxl_ctx *ctx, uint32_t domid, + const char *filename, + const libxl_asyncop_how *ao_how); int libxl_domain_setmaxmem(libxl_ctx *ctx, uint32_t domid, uint32_t target_memkb); int libxl_set_memory_target(libxl_ctx *ctx, uint32_t domid, int32_t target_memkb, int relative, int enforce); diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c index c1cab9ee12..45e2c30bf0 100644 --- a/tools/libxl/xl_cmdimpl.c +++ b/tools/libxl/xl_cmdimpl.c @@ -1306,7 +1306,7 @@ static int handle_domain_death(libxl_ctx *ctx, uint32_t domid, LOG("failed to construct core dump path"); } else { LOG("dumping core to %s", corefile); - rc=libxl_domain_core_dump(ctx, domid, corefile); + rc=libxl_domain_core_dump(ctx, domid, corefile, NULL); if (rc) LOG("core dump failed (rc=%d).", rc); } /* No point crying over spilled milk, continue on failure. */ @@ -2927,7 +2927,7 @@ static void core_dump_domain(const char *domain_spec, const char *filename) { int rc; find_domain(domain_spec); - rc=libxl_domain_core_dump(ctx, domid, filename); + rc=libxl_domain_core_dump(ctx, domid, filename, NULL); if (rc) { fprintf(stderr,"core dump failed (rc=%d)\n",rc);exit(-1); } } -- 2.39.5