From: Max Reitz <mreitz@redhat.com>
To: "Benoît Canet" <benoit@irqsave.net>
Cc: kwolf@redhat.com, qemu-devel@nongnu.org, stefanha@redhat.com
Subject: Re: [Qemu-devel] [PATCH V9 09/11] quorum: Add quorum_co_get_block_status.
Date: Fri, 04 Oct 2013 16:51:59 +0200 [thread overview]
Message-ID: <524ED60F.9090805@redhat.com> (raw)
In-Reply-To: <1380717564-11098-10-git-send-email-benoit@irqsave.net>
On 2013-10-02 14:39, Benoît Canet wrote:
> Signed-off-by: Benoit Canet <benoit@irqsave.net>
> ---
> block/quorum.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 67 insertions(+)
>
> diff --git a/block/quorum.c b/block/quorum.c
> index 223ad22..084d030 100644
> --- a/block/quorum.c
> +++ b/block/quorum.c
> @@ -171,6 +171,22 @@ static int quorum_sha256_compare(QuorumVoteValue *a, QuorumVoteValue *b)
> return memcmp(a->h, b->h, HASH_LENGTH);
> }
>
> +static int quorum_64bits_compare(QuorumVoteValue *a, QuorumVoteValue *b)
> +{
> + int64_t i = a->l;
> + int64_t j = b->l;
> +
> + if (i < j) {
> + return -1;
> + }
> +
> + if (i > j) {
> + return 1;
> + }
> +
> + return 0;
> +}
> +
> static QuorumAIOCB *quorum_aio_get(BDRVQuorumState *s,
> BlockDriverState *bs,
> QEMUIOVector *qiov,
> @@ -575,6 +591,56 @@ static void quorum_invalidate_cache(BlockDriverState *bs)
> }
> }
>
> +static int64_t coroutine_fn quorum_co_get_block_status(BlockDriverState *bs,
> + int64_t sector_num,
> + int nb_sectors,
> + int *pnum)
> +{
> + BDRVQuorumState *s = bs->opaque;
> + QuorumVoteVersion *winner = NULL;
> + QuorumVotes result_votes, num_votes;
> + QuorumVoteValue result_value, num_value;
> + int i, num;
> + int64_t result = 0;
> +
> + QLIST_INIT(&result_votes.vote_list);
> + QLIST_INIT(&num_votes.vote_list);
> + result_votes.compare = quorum_64bits_compare;
> + num_votes.compare = quorum_64bits_compare;
> +
> + for (i = 0; i < s->total; i++) {
> + result = bdrv_get_block_status(&s->bs[i], sector_num, nb_sectors, &num);
> + /* skip failed requests */
> + if (result < 0) {
> + continue;
> + }
> + result_value.l = result & BDRV_BLOCK_DATA;
> + num_value.l = num;
> + quorum_count_vote(&result_votes, &result_value, i);
> + quorum_count_vote(&num_votes, &num_value, i);
> + }
> +
> + winner = quorum_get_vote_winner(&result_votes);
> + result = winner->value.l;
> + if (winner->vote_count < s->threshold) {
> + result = -ERANGE;
> + goto free_exit;
> + }
> +
> + winner = quorum_get_vote_winner(&num_votes);
> + if (winner->vote_count < s->threshold) {
> + result = -ERANGE;
> + goto free_exit;
> + }
> + *pnum = winner->value.l;
I wouldn't vote here. I think it would be better to take the minimum
value for pnum (the minimum of num_votes) and consider the sector
unallocated if it's unallocated for any child. But voting seems okay, too.
Max
> +
> +free_exit:
> + quorum_free_vote_list(&result_votes);
> + quorum_free_vote_list(&num_votes);
> +
> + return result;
> +}
> +
> static BlockDriver bdrv_quorum = {
> .format_name = "quorum",
> .protocol_name = "quorum",
> @@ -586,6 +652,7 @@ static BlockDriver bdrv_quorum = {
> .bdrv_aio_readv = quorum_aio_readv,
> .bdrv_aio_writev = quorum_aio_writev,
> .bdrv_invalidate_cache = quorum_invalidate_cache,
> + .bdrv_co_get_block_status = quorum_co_get_block_status,
> };
>
> static void bdrv_quorum_init(void)
next prev parent reply other threads:[~2013-10-04 14:52 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-02 12:39 [Qemu-devel] [PATCH V9 00/11] Quorum block driver Benoît Canet
2013-10-02 12:39 ` [Qemu-devel] [PATCH V9 01/11] quorum: Create quorum.c, add QuorumSingleAIOCB and QuorumAIOCB Benoît Canet
2013-10-04 14:33 ` Max Reitz
2013-10-02 12:39 ` [Qemu-devel] [PATCH V9 02/11] quorum: Create BDRVQuorumState and BlkDriver and do init Benoît Canet
2013-10-04 14:34 ` Max Reitz
2013-10-02 12:39 ` [Qemu-devel] [PATCH V9 03/11] quorum: Add quorum_aio_writev and its dependencies Benoît Canet
2013-10-04 14:35 ` Max Reitz
2013-10-28 12:21 ` Benoît Canet
2013-10-29 17:21 ` Max Reitz
2013-10-29 20:06 ` Benoît Canet
2013-10-02 12:39 ` [Qemu-devel] [PATCH V9 04/11] blkverify: Extract qemu_iovec_clone() and qemu_iovec_compare() from blkverify Benoît Canet
2013-10-02 12:39 ` [Qemu-devel] [PATCH V9 05/11] quorum: Add quorum_aio_readv Benoît Canet
2013-10-04 14:38 ` Max Reitz
2013-10-02 12:39 ` [Qemu-devel] [PATCH V9 06/11] quorum: Add quorum mechanism Benoît Canet
2013-10-04 14:48 ` Max Reitz
2013-10-28 12:31 ` Benoît Canet
2013-10-29 16:42 ` Max Reitz
2013-10-28 13:04 ` Benoît Canet
2013-10-29 17:34 ` Max Reitz
2013-10-02 12:39 ` [Qemu-devel] [PATCH V9 07/11] quorum: Add quorum_getlength() Benoît Canet
2013-10-04 14:49 ` Max Reitz
2013-10-02 12:39 ` [Qemu-devel] [PATCH V9 08/11] quorum: Add quorum_invalidate_cache() Benoît Canet
2013-10-02 12:39 ` [Qemu-devel] [PATCH V9 09/11] quorum: Add quorum_co_get_block_status Benoît Canet
2013-10-04 14:51 ` Max Reitz [this message]
2013-10-02 12:39 ` [Qemu-devel] [PATCH V9 10/11] quorum: Add quorum_co_flush() Benoît Canet
2013-10-04 14:53 ` Max Reitz
2013-10-02 12:39 ` [Qemu-devel] [PATCH V9 11/11] quorum: Add quorum_open() and quorum_close() Benoît Canet
2013-10-04 15:14 ` Max Reitz
2013-10-04 15:31 ` Eric Blake
2013-10-07 7:23 ` Max Reitz
2013-10-04 14:31 ` [Qemu-devel] [PATCH V9 00/11] Quorum block driver Max Reitz
2013-10-04 22:25 ` Benoît Canet
2013-10-29 7:59 ` Benoît Canet
2013-10-29 17:55 ` Max Reitz
2013-10-29 17:56 ` Max Reitz
2013-10-29 20:06 ` Benoît Canet
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=524ED60F.9090805@redhat.com \
--to=mreitz@redhat.com \
--cc=benoit@irqsave.net \
--cc=kwolf@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.