From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53865) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aqynM-0003r1-8C for qemu-devel@nongnu.org; Fri, 15 Apr 2016 04:08:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aqynI-0003V5-9S for qemu-devel@nongnu.org; Fri, 15 Apr 2016 04:08:04 -0400 From: Changlong Xie Date: Fri, 15 Apr 2016 16:10:32 +0800 Message-ID: <1460707838-13510-3-git-send-email-xiecl.fnst@cn.fujitsu.com> In-Reply-To: <1460707838-13510-1-git-send-email-xiecl.fnst@cn.fujitsu.com> References: <1460707838-13510-1-git-send-email-xiecl.fnst@cn.fujitsu.com> MIME-Version: 1.0 Content-Type: text/plain Subject: [Qemu-devel] [PATCH v18 2/8] Backup: clear all bitmap when doing block checkpoint List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu devel , Eric Blake , Alberto Garcia , Kevin Wolf , Max Reitz , Stefan Hajnoczi Cc: Markus Armbruster , "Dr. David Alan Gilbert" , Dong Eddie , Jiang Yunhong , Wen Congyang , Changlong Xie , qemu block From: Wen Congyang Signed-off-by: Wen Congyang Signed-off-by: zhanghailiang Signed-off-by: Gonglei Signed-off-by: Changlong Xie --- block/backup.c | 17 +++++++++++++++++ include/block/block_int.h | 2 ++ 2 files changed, 19 insertions(+) diff --git a/block/backup.c b/block/backup.c index 491fd14..d5ffc32 100644 --- a/block/backup.c +++ b/block/backup.c @@ -259,6 +259,23 @@ static void backup_abort(BlockJob *job) } } +void backup_do_checkpoint(BlockJob *job, Error **errp) +{ + BackupBlockJob *backup_job = container_of(job, BackupBlockJob, common); + int64_t len; + + assert(job->driver->job_type == BLOCK_JOB_TYPE_BACKUP); + + if (backup_job->sync_mode != MIRROR_SYNC_MODE_NONE) { + error_setg(errp, "The backup job only supports block checkpoint in" + " sync=none mode"); + return; + } + + len = DIV_ROUND_UP(backup_job->common.len, backup_job->cluster_size); + bitmap_zero(backup_job->done_bitmap, len); +} + static const BlockJobDriver backup_job_driver = { .instance_size = sizeof(BackupBlockJob), .job_type = BLOCK_JOB_TYPE_BACKUP, diff --git a/include/block/block_int.h b/include/block/block_int.h index 7e238a0..3c3caa7 100644 --- a/include/block/block_int.h +++ b/include/block/block_int.h @@ -718,6 +718,8 @@ BdrvChild *bdrv_root_attach_child(BlockDriverState *child_bs, const BdrvChildRole *child_role); void bdrv_root_unref_child(BdrvChild *child); +void backup_do_checkpoint(BlockJob *job, Error **errp); + void blk_dev_change_media_cb(BlockBackend *blk, bool load); bool blk_dev_has_removable_media(BlockBackend *blk); bool blk_dev_has_tray(BlockBackend *blk); -- 1.9.3