On Tue, Aug 14, 2012 at 2:14 PM, Benoît Canet <benoit.ca...@gmail.com> wrote: > 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
'n' and 'm' (these names are also used in the code) are not descriptive. How about 'total' (or 'max') and 'quorum'? > > 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 >