From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:47436) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T1Ht5-0006mb-5m for qemu-devel@nongnu.org; Tue, 14 Aug 2012 10:14:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1T1Hsv-0004MM-7Q for qemu-devel@nongnu.org; Tue, 14 Aug 2012 10:14:27 -0400 Received: from mail-wi0-f175.google.com ([209.85.212.175]:37307) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T1Hsv-0004Lu-17 for qemu-devel@nongnu.org; Tue, 14 Aug 2012 10:14:17 -0400 Received: by wibhm2 with SMTP id hm2so3454197wib.10 for ; Tue, 14 Aug 2012 07:14:15 -0700 (PDT) From: "=?UTF-8?q?Beno=C3=AEt=20Canet?=" Date: Tue, 14 Aug 2012 16:14:02 +0200 Message-Id: <1344953651-16622-1-git-send-email-benoit@irqsave.net> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Subject: [Qemu-devel] [RFC V3 0/9] Quorum disk image corruption resiliency List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kwolf@redhat.com, stefanha@linux.vnet.ibm.com, blauwirbel@gmail.com, anthony@codemonkey.ws, pbonzini@redhat.com, eblake@redhat.com, afaerber@suse.de, =?UTF-8?q?Beno=C3=AEt=20Canet?= This patchset create a block driver implementing a quorum using m qemu disk 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 return 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 just above raw-*.c and below qcow2/qed when the required infrastructure will be 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 blkmirror. usage: -drive file=quorum:n/m:image_1.raw:...:image_m.raw,if=virtio,cache=none in v2: eblake: fix typos squash two first commits afärber: 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ît 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 -- 1.7.9.5