Message ID | 1392242799-16364-3-git-send-email-benoit.canet@irqsave.net |
---|---|
State | New |
Headers | show |
On 12.02.2014 23:06, Benoît Canet wrote: > From: Benoît Canet <benoit@irqsave.net> > > 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> > --- > block/quorum.c | 31 +++++++++++++++++++++++++++++++ > 1 file changed, 31 insertions(+) > > diff --git a/block/quorum.c b/block/quorum.c > index 950f5cc..36c5bb8 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 Probably better with apostrophe: "children devices' contents". > + * compared and when a difference is spotted its Since we're not rooting for an error, I'd prefer an "if" instead of "when". > + * location is printed and the code abort. "aborts" Reviewed-by: Max Reitz <mreitz@redhat.com> > + * 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);
diff --git a/block/quorum.c b/block/quorum.c index 950f5cc..36c5bb8 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 when a difference is spotted its + * location is printed and the code abort. + * 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);