From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:48359) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TfT3m-0001lB-37 for qemu-devel@nongnu.org; Mon, 03 Dec 2012 05:15:39 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TfT3g-00010m-4J for qemu-devel@nongnu.org; Mon, 03 Dec 2012 05:15:34 -0500 Received: from e23smtp09.au.ibm.com ([202.81.31.142]:36317) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TfT3f-00010d-CX for qemu-devel@nongnu.org; Mon, 03 Dec 2012 05:15:28 -0500 Received: from /spool/local by e23smtp09.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 3 Dec 2012 20:10:45 +1000 Received: from d23relay04.au.ibm.com (d23relay04.au.ibm.com [9.190.234.120]) by d23dlp03.au.ibm.com (Postfix) with ESMTP id C62143578049 for ; Mon, 3 Dec 2012 21:15:14 +1100 (EST) Received: from d23av03.au.ibm.com (d23av03.au.ibm.com [9.190.234.97]) by d23relay04.au.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id qB3A4R7i64749804 for ; Mon, 3 Dec 2012 21:04:28 +1100 Received: from d23av03.au.ibm.com (loopback [127.0.0.1]) by d23av03.au.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id qB3AFD07031207 for ; Mon, 3 Dec 2012 21:15:13 +1100 Message-ID: <50BC7B5C.6020308@linux.vnet.ibm.com> Date: Mon, 03 Dec 2012 18:13:48 +0800 From: Wenchao Xia MIME-Version: 1.0 References: <1354267354-1028712-1-git-send-email-dietmar@proxmox.com> <1354267354-1028712-6-git-send-email-dietmar@proxmox.com> In-Reply-To: <1354267354-1028712-6-git-send-email-dietmar@proxmox.com> Content-Type: text/plain; charset=GB2312 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v2 6/6] add vm state to backups List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Dietmar Maurer Cc: qemu-devel@nongnu.org > +static void coroutine_fn backup_start_savevm(void *opaque) > +{ > + assert(backup_state.driver); > + assert(backup_state.writer); > + int ret; > + char *err = NULL; > + uint64_t remaining; > + int64_t maxlen; > + MigrationParams params = { > + .blk = 0, > + .shared = 0 > + }; > + > + int restart = 0; > + > + QEMUFile *file = qemu_fopen_ops(NULL, &backup_file_ops); > + > + ret = qemu_savevm_state_begin(file, ¶ms); > + if (ret < 0) { > + qemu_fclose(file); > + err = g_strdup("qemu_savevm_state_begin failed"); > + goto abort; > + } > + > + while (1) { > + ret = qemu_savevm_state_iterate(file); > + remaining = ram_bytes_remaining(); > + > + if (ret < 0) { > + qemu_fclose(file); > + err = g_strdup_printf("qemu_savevm_state_iterate error %d", ret); > + goto abort; > + } > + > + /* stop the VM if we use too much space, > + * or if remaining is just a few MB > + */ > + maxlen = ram_bytes_total(); > + size_t cpos = backup_state.buf_cluster_num * BACKUP_CLUSTER_SIZE; > + if ((remaining < 100000) || ((cpos + remaining) >= maxlen)) { > + if (runstate_is_running()) { > + restart = 1; > + vm_stop(RUN_STATE_SAVE_VM); > + } > + } > + > + if (ret == 1) { /* finished */ > + if (runstate_is_running()) { > + restart = 1; > + vm_stop(RUN_STATE_SAVE_VM); > + } > + > + ret = qemu_savevm_state_complete(file); > + if (ret < 0) { > + qemu_fclose(file); > + err = g_strdup("qemu_savevm_state_complete error"); > + goto abort; > + > + } else { > + if (qemu_fclose(file) < 0) { > + error_setg(&backup_state.error, > + "backup_start_savevm: qemu_fclose failed"); > + goto abort; > + } > + if (backup_state.driver->complete_cb(backup_state.writer, > + backup_state.vmstate_dev_id, 0) < 0) { > + err = g_strdup("backup_start_savevm: complete_cb failed"); > + goto abort; > + } > + backup_start_jobs(); backup_start_jobs() was called after qemu_savevm_state_complete(), and then VM got resumed with block backup jobs alone, would this cause saved vm state not sync with the saved block contents, if there is vmstate changing after backup_start_jobs()? > + goto out; > + } > + } > + } -- Best Regards Wenchao Xia