From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40404) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZD0mc-0002gf-1f for qemu-devel@nongnu.org; Wed, 08 Jul 2015 21:37:51 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZD0ma-0007eJ-Sw for qemu-devel@nongnu.org; Wed, 08 Jul 2015 21:37:49 -0400 Message-ID: <559DD14E.1070508@cn.fujitsu.com> Date: Thu, 9 Jul 2015 09:41:34 +0800 From: Wen Congyang MIME-Version: 1.0 References: <1436258596-1253-1-git-send-email-wency@cn.fujitsu.com> <1436258596-1253-10-git-send-email-wency@cn.fujitsu.com> <20150709012822.GE2741@work-vm> In-Reply-To: <20150709012822.GE2741@work-vm> Content-Type: text/plain; charset="windows-1252" Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH COLO-BLOCK v8 09/18] Backup: clear all bitmap when doing block checkpoint List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Dr. David Alan Gilbert" Cc: Kevin Wolf , Fam Zheng , zhanghailiang , qemu block , Jeff Cody , Jiang Yunhong , Dong Eddie , qemu devel , "Michael R. Hines" , Max Reitz , Gonglei , Stefan Hajnoczi , Paolo Bonzini , Yang Hongyang On 07/09/2015 09:28 AM, Dr. David Alan Gilbert wrote: > * Wen Congyang (wency@cn.fujitsu.com) wrote: >> Signed-off-by: Wen Congyang >> Signed-off-by: zhanghailiang >> Signed-off-by: Gonglei >> Cc: Jeff Cody >> --- >> block/backup.c | 13 +++++++++++++ >> blockjob.c | 10 ++++++++++ >> include/block/blockjob.h | 12 ++++++++++++ >> 3 files changed, 35 insertions(+) >> >> diff --git a/block/backup.c b/block/backup.c >> index d3c7d9f..ebb8a88 100644 >> --- a/block/backup.c >> +++ b/block/backup.c >> @@ -211,11 +211,24 @@ static void backup_iostatus_reset(BlockJob *job) >> bdrv_iostatus_reset(s->target); >> } >> >> +static void backup_do_checkpoint(BlockJob *job, Error **errp) >> +{ >> + BackupBlockJob *backup_job = container_of(job, BackupBlockJob, common); >> + >> + if (backup_job->sync_mode != MIRROR_SYNC_MODE_NONE) { >> + error_setg(errp, "this feature or command is not currently supported"); > > You use this text in a few different errors in the block code; we've currently > got one test machine which is producing it and we haven't yet figured out > which one of the exit paths is doing it. Please make each one unique and state > an identifier; e.g. "checkpoint on block backup in sync ... for blockjob ..." > (I'm not sure what exaclty makes sense for block jobs - but something like that). OK, I will check all error messages. Thanks Wen Congyang > > Dave > >> + return; >> + } >> + >> + hbitmap_reset_all(backup_job->bitmap); >> +} >> + >> static const BlockJobDriver backup_job_driver = { >> .instance_size = sizeof(BackupBlockJob), >> .job_type = BLOCK_JOB_TYPE_BACKUP, >> .set_speed = backup_set_speed, >> .iostatus_reset = backup_iostatus_reset, >> + .do_checkpoint = backup_do_checkpoint, >> }; >> >> static BlockErrorAction backup_error_action(BackupBlockJob *job, >> diff --git a/blockjob.c b/blockjob.c >> index ec46fad..cb412d1 100644 >> --- a/blockjob.c >> +++ b/blockjob.c >> @@ -400,3 +400,13 @@ void block_job_defer_to_main_loop(BlockJob *job, >> >> qemu_bh_schedule(data->bh); >> } >> + >> +void block_job_do_checkpoint(BlockJob *job, Error **errp) >> +{ >> + if (!job->driver->do_checkpoint) { >> + error_setg(errp, "this feature or command is not currently supported"); >> + return; >> + } >> + >> + job->driver->do_checkpoint(job, errp); >> +} >> diff --git a/include/block/blockjob.h b/include/block/blockjob.h >> index 57d8ef1..b832dc3 100644 >> --- a/include/block/blockjob.h >> +++ b/include/block/blockjob.h >> @@ -50,6 +50,9 @@ typedef struct BlockJobDriver { >> * manually. >> */ >> void (*complete)(BlockJob *job, Error **errp); >> + >> + /** Optional callback for job types that support checkpoint. */ >> + void (*do_checkpoint)(BlockJob *job, Error **errp); >> } BlockJobDriver; >> >> /** >> @@ -348,4 +351,13 @@ void block_job_defer_to_main_loop(BlockJob *job, >> BlockJobDeferToMainLoopFn *fn, >> void *opaque); >> >> +/** >> + * block_job_do_checkpoint: >> + * @job: The job. >> + * @errp: Error object. >> + * >> + * Do block checkpoint on the specified job. >> + */ >> +void block_job_do_checkpoint(BlockJob *job, Error **errp); >> + >> #endif >> -- >> 2.4.3 >> > -- > Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK > . >