Message ID | 1359392845-15905-8-git-send-email-benoit@irqsave.net |
---|---|
State | New |
Headers | show |
Am 28.01.2013 18:07, schrieb Benoît Canet: > Check that every bs file return the same length. > If not return -EIO to disable the quorum and > avoid length discrepancy. > > Signed-off-by: Benoit Canet <benoit@irqsave.net> > --- > block/quorum.c | 20 ++++++++++++++++++++ > 1 file changed, 20 insertions(+) > > diff --git a/block/quorum.c b/block/quorum.c > index 4c552e4..fe920e7 100644 > --- a/block/quorum.c > +++ b/block/quorum.c > @@ -497,12 +497,32 @@ static BlockDriverAIOCB *quorum_aio_writev(BlockDriverState *bs, > return &acb->common; > } > > +static int64_t quorum_getlength(BlockDriverState *bs) > +{ > + BDRVQuorumState *s = bs->opaque; > + int64_t result; > + int i; > + > + /* check that every file have the same length */ "all files have" or "every file has" > + result = bdrv_getlength(s->bs[0]); > + for (i = 1; i < s->total; i++) { > + int64_t value = bdrv_getlength(s->bs[i]); > + if (value != result) { > + return -EIO; > + } > + } > + > + return result; > +} Should bdrv_getlength() error returns be handled in some way? Kevin
diff --git a/block/quorum.c b/block/quorum.c index 4c552e4..fe920e7 100644 --- a/block/quorum.c +++ b/block/quorum.c @@ -497,12 +497,32 @@ static BlockDriverAIOCB *quorum_aio_writev(BlockDriverState *bs, return &acb->common; } +static int64_t quorum_getlength(BlockDriverState *bs) +{ + BDRVQuorumState *s = bs->opaque; + int64_t result; + int i; + + /* check that every file have the same length */ + result = bdrv_getlength(s->bs[0]); + for (i = 1; i < s->total; i++) { + int64_t value = bdrv_getlength(s->bs[i]); + if (value != result) { + return -EIO; + } + } + + return result; +} + static BlockDriver bdrv_quorum = { .format_name = "quorum", .protocol_name = "quorum", .instance_size = sizeof(BDRVQuorumState), + .bdrv_getlength = quorum_getlength, + .bdrv_aio_readv = quorum_aio_readv, .bdrv_aio_writev = quorum_aio_writev, };
Check that every bs file return the same length. If not return -EIO to disable the quorum and avoid length discrepancy. Signed-off-by: Benoit Canet <benoit@irqsave.net> --- block/quorum.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+)