[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] libxl: rename stubdomain when renaming domain
# HG changeset patch # User Ian Campbell <ian.campbell@xxxxxxxxxx> # Date 1341397625 -3600 # Node ID 167f013324e854a28fc7637cbb7211fa266dcbc5 # Parent 12011fcfd5cce2a831da3558c59f2c3622e71250 libxl: rename stubdomain when renaming domain. Otherwise after a localhost migrate of an HVM domain with a stubdomain we end up with domains called "FOO" and "FOO--incoming-dm". This because we initially create the domains as "FOO--incoming" and then rename to "FOO" inorder to maintain the uniqueness of domain names on a host. In this state a second attempt to migrate will fail upon attempting to create a new domain named "FOO--incoming-dm" Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx> diff -r 12011fcfd5cc -r 167f013324e8 tools/libxl/libxl.c --- a/tools/libxl/libxl.c Thu Jun 28 13:25:02 2012 +0100 +++ b/tools/libxl/libxl.c Wed Jul 04 11:27:05 2012 +0100 @@ -276,6 +276,8 @@ int libxl__domain_rename(libxl__gc *gc, char *got_old_name; unsigned int got_old_len; xs_transaction_t our_trans = 0; + uint32_t stub_dm_domid; + const char *stub_dm_old_name = NULL, *stub_dm_new_name = NULL; int rc; dom_path = libxl__xs_get_dompath(gc, domid); @@ -284,6 +286,12 @@ int libxl__domain_rename(libxl__gc *gc, name_path= libxl__sprintf(gc, "%s/name", dom_path); if (!name_path) goto x_nomem; + stub_dm_domid = libxl_get_stubdom_id(CTX, domid); + if (stub_dm_domid) { + stub_dm_old_name = libxl__stub_dm_name(gc, old_name); + stub_dm_new_name = libxl__stub_dm_name(gc, new_name); + } + retry_transaction: if (!trans) { trans = our_trans = xs_transaction_start(ctx->xsh); @@ -341,6 +349,17 @@ int libxl__domain_rename(libxl__gc *gc, goto x_fail; } + if (stub_dm_domid) { + rc = libxl__domain_rename(gc, stub_dm_domid, + stub_dm_old_name, + stub_dm_new_name, + trans); + if (rc) { + LOGE(ERROR, "unable to rename stub-domain"); + goto x_rc; + } + } + if (our_trans) { if (!xs_transaction_end(ctx->xsh, our_trans, 0)) { trans = our_trans = 0; diff -r 12011fcfd5cc -r 167f013324e8 tools/libxl/libxl_dm.c --- a/tools/libxl/libxl_dm.c Thu Jun 28 13:25:02 2012 +0100 +++ b/tools/libxl/libxl_dm.c Wed Jul 04 11:27:05 2012 +0100 @@ -705,6 +705,11 @@ static void spaw_stubdom_pvqemu_destroy_ libxl__destroy_domid_state *dis, int rc); +char *libxl__stub_dm_name(libxl__gc *gc, const char *guest_name) +{ + return libxl__sprintf(gc, "%s-dm", guest_name); +} + void libxl__spawn_stub_dm(libxl__egc *egc, libxl__stub_dm_spawn_state *sdss) { STATE_AO_GC(sdss->dm.spawn.ao); @@ -733,7 +738,7 @@ void libxl__spawn_stub_dm(libxl__egc *eg libxl_domain_create_info_init(&dm_config->c_info); dm_config->c_info.type = LIBXL_DOMAIN_TYPE_PV; - dm_config->c_info.name = libxl__sprintf(gc, "%s-dm", + dm_config->c_info.name = libxl__stub_dm_name(gc, libxl__domid_to_name(gc, guest_domid)); dm_config->c_info.ssidref = guest_config->b_info.device_model_ssidref; diff -r 12011fcfd5cc -r 167f013324e8 tools/libxl/libxl_internal.h --- a/tools/libxl/libxl_internal.h Thu Jun 28 13:25:02 2012 +0100 +++ b/tools/libxl/libxl_internal.h Wed Jul 04 11:27:05 2012 +0100 @@ -2290,6 +2290,8 @@ typedef struct { _hidden void libxl__spawn_stub_dm(libxl__egc *egc, libxl__stub_dm_spawn_state*); +_hidden char *libxl__stub_dm_name(libxl__gc *gc, const char * guest_name); + /*----- Domain creation -----*/ typedef struct libxl__domain_create_state libxl__domain_create_state; _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |