From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46563) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aOSbM-0000NF-IF for qemu-devel@nongnu.org; Wed, 27 Jan 2016 11:05:49 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aOSbI-0000l3-Gy for qemu-devel@nongnu.org; Wed, 27 Jan 2016 11:05:48 -0500 Received: from mail-wm0-x244.google.com ([2a00:1450:400c:c09::244]:36297) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aOSbI-0000jo-61 for qemu-devel@nongnu.org; Wed, 27 Jan 2016 11:05:44 -0500 Received: by mail-wm0-x244.google.com with SMTP id l65so4181166wmf.3 for ; Wed, 27 Jan 2016 08:05:44 -0800 (PST) Date: Wed, 27 Jan 2016 16:05:41 +0000 From: Stefan Hajnoczi Message-ID: <20160127160541.GA29236@stefanha-x1.localdomain> References: <1452676712-24239-1-git-send-email-xiecl.fnst@cn.fujitsu.com> <1452676712-24239-4-git-send-email-xiecl.fnst@cn.fujitsu.com> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="2fHTh5uZTiUOsy+g" Content-Disposition: inline In-Reply-To: <1452676712-24239-4-git-send-email-xiecl.fnst@cn.fujitsu.com> Subject: Re: [Qemu-devel] [PATCH v14 3/8] Backup: clear all bitmap when doing block checkpoint List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Changlong Xie Cc: Kevin Wolf , Fam Zheng , zhanghailiang , fnstml-hwcolo@cn.fujitsu.com, qemu devel , Max Reitz , Gonglei , Stefan Hajnoczi , Paolo Bonzini --2fHTh5uZTiUOsy+g Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Wed, Jan 13, 2016 at 05:18:27PM +0800, Changlong Xie wrote: > diff --git a/blockjob.c b/blockjob.c > index 80adb9d..0c8edfe 100644 > --- a/blockjob.c > +++ b/blockjob.c > @@ -533,3 +533,14 @@ void block_job_txn_add_job(BlockJobTxn *txn, BlockJob *job) > QLIST_INSERT_HEAD(&txn->jobs, job, txn_list); > block_job_txn_ref(txn); > } > + > +void block_job_do_checkpoint(BlockJob *job, Error **errp) > +{ > + if (!job->driver->do_checkpoint) { > + error_setg(errp, "The job %s doesn't support block checkpoint", > + BlockJobType_lookup[job->driver->job_type]); > + return; > + } > + > + job->driver->do_checkpoint(job, errp); > +} > diff --git a/include/block/blockjob.h b/include/block/blockjob.h > index d84ccd8..abdba7c 100644 > --- a/include/block/blockjob.h > +++ b/include/block/blockjob.h > @@ -70,6 +70,9 @@ typedef struct BlockJobDriver { > * never both. > */ > void (*abort)(BlockJob *job); > + > + /** Optional callback for job types that support checkpoint. */ > + void (*do_checkpoint)(BlockJob *job, Error **errp); The COLO/replication-specific callbacks have been moved out of BlockDriver into their own replication struct. Similar reasoning applies to BlockJobDriver: The do_checkpoint() callback is only implemented by one type of job and its purpose is related to COLO rather than jobs. This is a strong indication that this shouldn't be part of the generic BlockJobDriver struct. Please drop changes to the generic blockjob interface. Instead, make backup_do_checkpoint() public and add assert(job->driver->type == BLOCK_JOB_TYPE_BACKUP) into the function. Then the replication filter can call backup_do_checkpoint() directly. Stefan --2fHTh5uZTiUOsy+g Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQEcBAEBAgAGBQJWqOrVAAoJEJykq7OBq3PIC9EH/RWAwy24D/6nxladOvfMPB0d mYRdXlkLpWrBg21VBFyNKwiiDweQ/SGk+lmGYGSF0WCC8PeiU5UcfhdImMJs8ST2 i/6eWhseGTyKJcPQrS9I6K6D37+YhUnRPioVE9nmaU9vImFtsZoy4jgK80kn0as2 S3q01elhrC5SzWHtNzThx4plAOTdoDgKf63RpjzuCwxgYaW+7ewUXaBMSxKesXnL DilwfWfIhf72sIUi/ukpF0bALO6Xvt7IecjAEC5/RcUA5YED7jdBuQBlVdbz1r81 Q44rPm5mjITrDU6gTNTjfadSIOtK4ly7Leh/phAuV7/b3CbJk2S9DIVu7dopVEQ= =Xl5c -----END PGP SIGNATURE----- --2fHTh5uZTiUOsy+g--