Am 03.02.2014 um 22:51 hat Benoît Canet geschrieben: > From: Benoît Canet <ben...@irqsave.net> > > Signed-off-by: Benoit Canet <ben...@irqsave.net> > Reviewed-by: Max Reitz <mre...@redhat.com> > --- > block/quorum.c | 25 +++++++++++++++++++++++++ > 1 file changed, 25 insertions(+) > > diff --git a/block/quorum.c b/block/quorum.c > index 17695d6..157efdf 100644 > --- a/block/quorum.c > +++ b/block/quorum.c > @@ -15,6 +15,16 @@ > > #include "block/block_int.h" > > +/* the following structure holds the state of one quorum instance */ > +typedef struct {
The convention is to have both a struct name and a typedef name (and it should be the same in both places, of course). > + BlockDriverState **bs; /* children BlockDriverStates */ > + int total; /* children count */ num_children? "total" could be anything. > + 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 */ Can you describe in detail, what blkverify mode is? > +} BDRVQuorumState; > + > typedef struct QuorumAIOCB QuorumAIOCB; > > /* Quorum will create one instance of the following structure per operation > it > @@ -37,6 +47,7 @@ typedef struct QuorumSingleAIOCB { > */ > struct QuorumAIOCB { > BlockDriverAIOCB common; > + BDRVQuorumState *bqs; > > /* Request metadata */ > uint64_t sector_num; > @@ -52,3 +63,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); I suspect that trying to use the driver will cause segfaults in this state (has neither bdrv_open nor bdrv_file_open). But okay, we can live with that. Kevin