summaryrefslogtreecommitdiffstats
path: root/block
diff options
context:
space:
mode:
authorBenoƮt Canet2014-02-21 22:21:11 +0100
committerKevin Wolf2014-02-21 22:29:48 +0100
commitcadebd7a2a590c2ac5ced58c2fc207c7ae78fb1b (patch)
tree6a1f6873a7dea4d0db916a57ffadcdfef5ad16d6 /block
parentquorum: Create quorum.c, add QuorumChildRequest and QuorumAIOCB. (diff)
downloadqemu-cadebd7a2a590c2ac5ced58c2fc207c7ae78fb1b.tar.gz
qemu-cadebd7a2a590c2ac5ced58c2fc207c7ae78fb1b.tar.xz
qemu-cadebd7a2a590c2ac5ced58c2fc207c7ae78fb1b.zip
quorum: Create BDRVQuorumState and BlkDriver and do init.
Create the structure holding the quorum settings and write the minimal block driver instanciation boilerplate. Signed-off-by: Benoit Canet <benoit@irqsave.net> Reviewed-by: Max Reitz <mreitz@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'block')
-rw-r--r--block/quorum.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/block/quorum.c b/block/quorum.c
index 950f5cc990..375ffd5963 100644
--- a/block/quorum.c
+++ b/block/quorum.c
@@ -15,6 +15,23 @@
#include "block/block_int.h"
+/* the following structure holds the state of one quorum instance */
+typedef struct BDRVQuorumState {
+ BlockDriverState **bs; /* children BlockDriverStates */
+ int num_children; /* children count */
+ int threshold; /* if less than threshold children reads gave the
+ * same result a quorum error occurs.
+ */
+ bool is_blkverify; /* true if the driver is in blkverify mode
+ * Writes are mirrored on two children devices.
+ * On reads the two children devices' contents are
+ * compared and if a difference is spotted its
+ * location is printed and the code aborts.
+ * It is useful to debug other block drivers by
+ * comparing them with a reference one.
+ */
+} BDRVQuorumState;
+
typedef struct QuorumAIOCB QuorumAIOCB;
/* Quorum will create one instance of the following structure per operation it
@@ -51,3 +68,17 @@ struct QuorumAIOCB {
bool is_read;
int vote_ret;
};
+
+static BlockDriver bdrv_quorum = {
+ .format_name = "quorum",
+ .protocol_name = "quorum",
+
+ .instance_size = sizeof(BDRVQuorumState),
+};
+
+static void bdrv_quorum_init(void)
+{
+ bdrv_register(&bdrv_quorum);
+}
+
+block_init(bdrv_quorum_init);