From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:55083) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T1dOv-0006E4-C9 for qemu-devel@nongnu.org; Wed, 15 Aug 2012 09:12:46 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1T1dOu-0004ic-4E for qemu-devel@nongnu.org; Wed, 15 Aug 2012 09:12:45 -0400 Received: from mail-lb0-f173.google.com ([209.85.217.173]:43477) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T1dOt-0004iV-Sb for qemu-devel@nongnu.org; Wed, 15 Aug 2012 09:12:44 -0400 Received: by lbbgm13 with SMTP id gm13so841481lbb.4 for ; Wed, 15 Aug 2012 06:12:42 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: <1344953651-16622-1-git-send-email-benoit@irqsave.net> References: <1344953651-16622-1-git-send-email-benoit@irqsave.net> Date: Wed, 15 Aug 2012 14:12:42 +0100 Message-ID: From: Stefan Hajnoczi Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [RFC V3 0/9] Quorum disk image corruption resiliency List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: =?ISO-8859-1?Q?Beno=EEt_Canet?= Cc: kwolf@redhat.com, stefanha@linux.vnet.ibm.com, qemu-devel@nongnu.org, blauwirbel@gmail.com, anthony@codemonkey.ws, pbonzini@redhat.com, eblake@redhat.com, afaerber@suse.de, =?ISO-8859-1?Q?Beno=EEt_Canet?= On Tue, Aug 14, 2012 at 3:14 PM, Beno=EEt Canet wr= ote: > This patchset create a block driver implementing a quorum using m qemu di= sk > images. Writes are mirrored on the m files. > For the reading part the m files are read at the same time and a vote is > done to determine if a qiov version is present n or more times. It then r= eturn > this majority version to the upper layers. > When i < n versions of the data are returned by the lower layer the > quorum is broken and the read return -EIO. > > The goal of this patchset is to be turned in a QEMU block filter living j= ust > above raw-*.c and below qcow2/qed when the required infrastructure will b= e done. > > Main use of this feature will be people using NFS appliances which can be > subjected to bitflip errors. > > This patchset can be used to replace blkverify and the out of tree blkmir= ror. > > usage: -drive file=3Dquorum:n/m:image_1.raw:...:image_m.raw,if=3Dvirtio,c= ache=3Dnone > > in v2: > > eblake: fix typos > squash two first commits > > af=E4rber: Modify the Makefile on first commit > > bcanet: move function prototype of quorum.c one patch down > > in v3: > > Blue Swirl: change char * to uint8_t * in QuorumSingleAIOCB > > Eric Blake: Add escaping of the : separator > Allow to specify the n/m ratio parameters of the Quorum > > Stefan Hajnoczi: Squash quorum_close and quorum_open patch to avoid leak > Add missing bdrv_delete() in quorum_close > simpler quorum_getlength > make the quorum_check_ret threshold a user setting (bind= it to n) > move blkverify_iovec_clone() and blkverify_iovec_compare= () to cutils.c > free unconditionally qemu_blockalign() with qemu_vfree() > turn assignement into assert in quorum_copy_qiov() > > Beno=EEt Canet (9): > quorum: Create quorum.c, add QuorumSingleAIOCB and QuorumAIOCB. > quorum: Create BDRVQuorumState and BlkDriver and do init. > quorum: Add quorum_open() and quorum_close(). > quorum: Add quorum_getlength(). > quorum: Add quorum_aio_writev and its dependencies. > blkverify: Extract qemu_iovec_clone() and qemu_iovec_compare() from > blkverify. > quorum: Add quorum_co_flush(). > quorum: Add quorum_aio_readv. > quorum: Add quorum mechanism. > > block/Makefile.objs | 1 + > block/blkverify.c | 108 +--------- > block/quorum.c | 559 +++++++++++++++++++++++++++++++++++++++++++++= ++++++ > cutils.c | 103 ++++++++++ > qemu-common.h | 2 + > 5 files changed, 667 insertions(+), 106 deletions(-) > create mode 100644 block/quorum.c BTW once this feature is merged we could drop blkverify since quorum is more generic and provides blkverify behavior in the n=3D2/m=3D2 configuration. Stefan