Loading block/quorum.c +28 −0 Original line number Diff line number Diff line Loading @@ -629,12 +629,40 @@ static void quorum_invalidate_cache(BlockDriverState *bs) } } static coroutine_fn int quorum_co_flush(BlockDriverState *bs) { BDRVQuorumState *s = bs->opaque; QuorumVoteVersion *winner = NULL; QuorumVotes error_votes; QuorumVoteValue result_value; int i; int result = 0; QLIST_INIT(&error_votes.vote_list); error_votes.compare = quorum_64bits_compare; for (i = 0; i < s->num_children; i++) { result = bdrv_co_flush(s->bs[i]); result_value.l = result; quorum_count_vote(&error_votes, &result_value, i); } winner = quorum_get_vote_winner(&error_votes); result = winner->value.l; quorum_free_vote_list(&error_votes); return result; } static BlockDriver bdrv_quorum = { .format_name = "quorum", .protocol_name = "quorum", .instance_size = sizeof(BDRVQuorumState), .bdrv_co_flush_to_disk = quorum_co_flush, .bdrv_getlength = quorum_getlength, .bdrv_aio_readv = quorum_aio_readv, Loading Loading
block/quorum.c +28 −0 Original line number Diff line number Diff line Loading @@ -629,12 +629,40 @@ static void quorum_invalidate_cache(BlockDriverState *bs) } } static coroutine_fn int quorum_co_flush(BlockDriverState *bs) { BDRVQuorumState *s = bs->opaque; QuorumVoteVersion *winner = NULL; QuorumVotes error_votes; QuorumVoteValue result_value; int i; int result = 0; QLIST_INIT(&error_votes.vote_list); error_votes.compare = quorum_64bits_compare; for (i = 0; i < s->num_children; i++) { result = bdrv_co_flush(s->bs[i]); result_value.l = result; quorum_count_vote(&error_votes, &result_value, i); } winner = quorum_get_vote_winner(&error_votes); result = winner->value.l; quorum_free_vote_list(&error_votes); return result; } static BlockDriver bdrv_quorum = { .format_name = "quorum", .protocol_name = "quorum", .instance_size = sizeof(BDRVQuorumState), .bdrv_co_flush_to_disk = quorum_co_flush, .bdrv_getlength = quorum_getlength, .bdrv_aio_readv = quorum_aio_readv, Loading