From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Lalancette Subject: [PATCH]: Make migration handle errors a little better Date: Wed, 23 Jan 2008 14:46:02 -0500 Message-ID: <4797997A.1050809@redhat.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------080109070408080509080600" To: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: kvm-devel-bounces-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org Errors-To: kvm-devel-bounces-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org List-Id: kvm.vger.kernel.org This is a multi-part message in MIME format. --------------080109070408080509080600 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit All, Attached is a fairly simple patch to the migration code to make it handle errors better. In particular, if the remote side wasn't set up properly (i.e. the memory size didn't match), the migration would fail, but the source host didn't actually react properly, so the migration would still be "in-progress". This patch fixes up the error checking to properly quit when the remote side isn't prepared for whatever reason. Signed-off-by: Chris Lalancette --------------080109070408080509080600 Content-Type: text/x-patch; name="kvm-60-migration-error-checking.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="kvm-60-migration-error-checking.patch" diff --git a/qemu/migration.c b/qemu/migration.c index 17ad77c..ae95128 100644 --- a/qemu/migration.c +++ b/qemu/migration.c @@ -86,6 +86,7 @@ enum { /* migration status values */ MIG_STAT_SAVEVM_FAILED = 15, MIG_STAT_NO_MEM = 16, + MIG_STAT_DIRTY_TRACK_FAIL = 17, MIG_STAT_MIGRATION_CANCEL = 20, @@ -425,18 +426,26 @@ static int start_migration(MigrationState *s) #endif r = MIG_STAT_WRITE_FAILED; - if (write_whole_buffer(s->fd, &running, sizeof(running))) + if (write_whole_buffer(s->fd, &running, sizeof(running))) { + perror("vm_running write failed"); goto out; - if (write_whole_buffer(s->fd, &value, sizeof(value))) + } + if (write_whole_buffer(s->fd, &value, sizeof(value))) { + perror("phys_ram_size write failed"); goto out; + } #ifdef USE_KVM if (kvm_allowed) { value = cpu_to_be32(n); - if (write_whole_buffer(s->fd, &value, sizeof(value))) + if (write_whole_buffer(s->fd, &value, sizeof(value))) { + perror("phys_ram_size_bitmap size write failed"); goto out; - if (write_whole_buffer(s->fd, phys_ram_page_exist_bitmap, n)) + } + if (write_whole_buffer(s->fd, phys_ram_page_exist_bitmap, n)) { + perror("phys_ram_page_exist_bitmap write failed"); goto out; + } } #endif fcntl(s->fd, F_SETFL, O_NONBLOCK); @@ -456,7 +465,8 @@ static int start_migration(MigrationState *s) if (cpu_physical_memory_set_dirty_tracking(1)) { *s->has_error = MIG_STAT_KVM_SET_DIRTY_TRACKING_FAILED; - return -1; + r = MIG_STAT_DIRTY_TRACK_FAIL; + goto out; } s->addr = 0; @@ -470,6 +480,8 @@ static int start_migration(MigrationState *s) qemu_mod_timer(s->timer, qemu_get_clock(rt_clock)); qemu_set_fd_handler2(s->fd, NULL, NULL, migrate_write, s); + r = 0; + out: #ifdef USE_KVM if (phys_ram_page_exist_bitmap) @@ -498,8 +510,9 @@ static MigrationState *migration_init_fd(int detach, int fd) current_migration = s; - if (start_migration(s) == -1) { + if (start_migration(s)) { term_printf("Could not start migration\n"); + migrate_close(s); return NULL; } --------------080109070408080509080600 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ --------------080109070408080509080600 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ kvm-devel mailing list kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org https://lists.sourceforge.net/lists/listinfo/kvm-devel --------------080109070408080509080600--