From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:37066) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Tvrsm-0002CR-7t for qemu-devel@nongnu.org; Thu, 17 Jan 2013 11:00:08 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Tvrsj-00088o-FK for qemu-devel@nongnu.org; Thu, 17 Jan 2013 11:00:00 -0500 Received: from nodalink.pck.nerim.net ([62.212.105.220]:44060 helo=paradis.irqsave.net) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TvrkF-0005ln-UL for qemu-devel@nongnu.org; Thu, 17 Jan 2013 10:51:12 -0500 From: =?UTF-8?q?Beno=C3=AEt=20Canet?= Date: Thu, 17 Jan 2013 16:51:26 +0100 Message-Id: <1358437897-24251-1-git-send-email-benoit@irqsave.net> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [RFC V6 00/11] Quorum block filter. List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kwolf@redhat.com, pbonzini@redhat.com, =?UTF-8?q?Beno=C3=AEt=20Canet?= , stefanha@redhat.com Hello I am resuming the work on the quorum patchset. This patchset create a block driver implementing a quorum using total qem= u disk images. Writes are mirrored on the $total files. For the reading part the $total files are read at the same time and a vot= e is done to determine if a qiov version is present $threshold or more times. = It then return this majority version to the upper layers. When i < $threshold 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:threshold/total:image_1.raw:...:image_total.raw,if=3Dvirtio= ,cache=3Dnone since latest RFC: fix commit message of "quorum: Add quorum_open() and quorum_close()."= [Eric] return error after a vote in quorum_co_flush [Eric] Fix bitrot caused by headers and structures renaming [Beno=C3=AEt] initialize finished to NULL to prevent crash [Beno=C3=AEt] convert internal quorum code to uint64_t instead of int64_t [Beno=C3=AE= t] V5: Eric Blake: revert back separator to ":" rewrite quorum_getlength Beno=C3=AEt Canet: use memcmp to compare iovec excepted for the blkverify= case use strstart to parse argument in open Beno=C3=AEt Canet (11): 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_aio_writev and its dependencies. blkverify: Extract qemu_iovec_clone() and qemu_iovec_compare() from blkverify. quorum: Add quorum_aio_readv. quorum: Add quorum mechanism. quorum: Add quorum_getlength(). quorum: Add quorum_invalidate_cache(). quorum: Add quorum_co_is_allocated. quorum: Add quorum_co_flush(). block/Makefile.objs | 1 + block/blkverify.c | 108 +------- block/quorum.c | 707 +++++++++++++++++++++++++++++++++++++++++++= ++++++ include/qemu-common.h | 2 + iov.c | 103 +++++++ 5 files changed, 815 insertions(+), 106 deletions(-) create mode 100644 block/quorum.c --=20 1.7.10.4