[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v3 04/16] quorum: Convert to BdrvChild
From: |
Jeff Cody |
Subject: |
Re: [Qemu-devel] [PATCH v3 04/16] quorum: Convert to BdrvChild |
Date: |
Mon, 12 Oct 2015 20:58:51 -0400 |
User-agent: |
Mutt/1.5.21 (2010-09-15) |
On Fri, Oct 09, 2015 at 02:15:29PM +0200, Kevin Wolf wrote:
> Signed-off-by: Kevin Wolf <address@hidden>
> Reviewed-by: Max Reitz <address@hidden>
> Reviewed-by: Alberto Garcia <address@hidden>
> Reviewed-by: Fam Zheng <address@hidden>
> ---
> block/quorum.c | 65
> ++++++++++++++++++++++++++++++----------------------------
> 1 file changed, 34 insertions(+), 31 deletions(-)
>
> diff --git a/block/quorum.c b/block/quorum.c
> index 8fe53b4..b9ba028 100644
> --- a/block/quorum.c
> +++ b/block/quorum.c
> @@ -64,7 +64,7 @@ typedef struct QuorumVotes {
>
> /* the following structure holds the state of one quorum instance */
> typedef struct BDRVQuorumState {
> - BlockDriverState **bs; /* children BlockDriverStates */
> + BdrvChild **children; /* children BlockDriverStates */
> int num_children; /* children count */
> int threshold; /* if less than threshold children reads gave the
> * same result a quorum error occurs.
> @@ -336,7 +336,7 @@ static void quorum_report_bad_versions(BDRVQuorumState *s,
> continue;
> }
> QLIST_FOREACH(item, &version->items, next) {
> - quorum_report_bad(acb, s->bs[item->index]->node_name, 0);
> + quorum_report_bad(acb, s->children[item->index]->bs->node_name,
> 0);
> }
> }
> }
> @@ -369,8 +369,9 @@ static bool quorum_rewrite_bad_versions(BDRVQuorumState
> *s, QuorumAIOCB *acb,
> continue;
> }
> QLIST_FOREACH(item, &version->items, next) {
> - bdrv_aio_writev(s->bs[item->index], acb->sector_num, acb->qiov,
> - acb->nb_sectors, quorum_rewrite_aio_cb, acb);
> + bdrv_aio_writev(s->children[item->index]->bs, acb->sector_num,
> + acb->qiov, acb->nb_sectors,
> quorum_rewrite_aio_cb,
> + acb);
> }
> }
>
> @@ -639,13 +640,13 @@ static BlockAIOCB *read_quorum_children(QuorumAIOCB
> *acb)
> int i;
>
> for (i = 0; i < s->num_children; i++) {
> - acb->qcrs[i].buf = qemu_blockalign(s->bs[i], acb->qiov->size);
> + acb->qcrs[i].buf = qemu_blockalign(s->children[i]->bs,
> acb->qiov->size);
> qemu_iovec_init(&acb->qcrs[i].qiov, acb->qiov->niov);
> qemu_iovec_clone(&acb->qcrs[i].qiov, acb->qiov, acb->qcrs[i].buf);
> }
>
> for (i = 0; i < s->num_children; i++) {
> - bdrv_aio_readv(s->bs[i], acb->sector_num, &acb->qcrs[i].qiov,
> + bdrv_aio_readv(s->children[i]->bs, acb->sector_num,
> &acb->qcrs[i].qiov,
> acb->nb_sectors, quorum_aio_cb, &acb->qcrs[i]);
> }
>
> @@ -656,12 +657,12 @@ static BlockAIOCB *read_fifo_child(QuorumAIOCB *acb)
> {
> BDRVQuorumState *s = acb->common.bs->opaque;
>
> - acb->qcrs[acb->child_iter].buf = qemu_blockalign(s->bs[acb->child_iter],
> - acb->qiov->size);
> + acb->qcrs[acb->child_iter].buf =
> + qemu_blockalign(s->children[acb->child_iter]->bs, acb->qiov->size);
> qemu_iovec_init(&acb->qcrs[acb->child_iter].qiov, acb->qiov->niov);
> qemu_iovec_clone(&acb->qcrs[acb->child_iter].qiov, acb->qiov,
> acb->qcrs[acb->child_iter].buf);
> - bdrv_aio_readv(s->bs[acb->child_iter], acb->sector_num,
> + bdrv_aio_readv(s->children[acb->child_iter]->bs, acb->sector_num,
> &acb->qcrs[acb->child_iter].qiov, acb->nb_sectors,
> quorum_aio_cb, &acb->qcrs[acb->child_iter]);
>
> @@ -702,8 +703,8 @@ static BlockAIOCB *quorum_aio_writev(BlockDriverState *bs,
> int i;
>
> for (i = 0; i < s->num_children; i++) {
> - acb->qcrs[i].aiocb = bdrv_aio_writev(s->bs[i], sector_num, qiov,
> - nb_sectors, &quorum_aio_cb,
> + acb->qcrs[i].aiocb = bdrv_aio_writev(s->children[i]->bs, sector_num,
> + qiov, nb_sectors,
> &quorum_aio_cb,
> &acb->qcrs[i]);
> }
>
> @@ -717,12 +718,12 @@ static int64_t quorum_getlength(BlockDriverState *bs)
> int i;
>
> /* check that all file have the same length */
> - result = bdrv_getlength(s->bs[0]);
> + result = bdrv_getlength(s->children[0]->bs);
> if (result < 0) {
> return result;
> }
> for (i = 1; i < s->num_children; i++) {
> - int64_t value = bdrv_getlength(s->bs[i]);
> + int64_t value = bdrv_getlength(s->children[i]->bs);
> if (value < 0) {
> return value;
> }
> @@ -741,7 +742,7 @@ static void quorum_invalidate_cache(BlockDriverState *bs,
> Error **errp)
> int i;
>
> for (i = 0; i < s->num_children; i++) {
> - bdrv_invalidate_cache(s->bs[i], &local_err);
> + bdrv_invalidate_cache(s->children[i]->bs, &local_err);
> if (local_err) {
> error_propagate(errp, local_err);
> return;
> @@ -762,7 +763,7 @@ static coroutine_fn int quorum_co_flush(BlockDriverState
> *bs)
> error_votes.compare = quorum_64bits_compare;
>
> for (i = 0; i < s->num_children; i++) {
> - result = bdrv_co_flush(s->bs[i]);
> + result = bdrv_co_flush(s->children[i]->bs);
> result_value.l = result;
> quorum_count_vote(&error_votes, &result_value, i);
> }
> @@ -782,7 +783,7 @@ static bool
> quorum_recurse_is_first_non_filter(BlockDriverState *bs,
> int i;
>
> for (i = 0; i < s->num_children; i++) {
> - bool perm = bdrv_recurse_is_first_non_filter(s->bs[i],
> + bool perm = bdrv_recurse_is_first_non_filter(s->children[i]->bs,
> candidate);
> if (perm) {
> return true;
> @@ -922,8 +923,8 @@ static int quorum_open(BlockDriverState *bs, QDict
> *options, int flags,
> }
> }
>
> - /* allocate the children BlockDriverState array */
> - s->bs = g_new0(BlockDriverState *, s->num_children);
> + /* allocate the children array */
> + s->children = g_new0(BdrvChild *, s->num_children);
> opened = g_new0(bool, s->num_children);
>
> for (i = 0; i < s->num_children; i++) {
> @@ -931,9 +932,10 @@ static int quorum_open(BlockDriverState *bs, QDict
> *options, int flags,
> ret = snprintf(indexstr, 32, "children.%d", i);
> assert(ret < 32);
>
> - ret = bdrv_open_image(&s->bs[i], NULL, options, indexstr, bs,
> - &child_format, false, &local_err);
> - if (ret < 0) {
> + s->children[i] = bdrv_open_child(NULL, options, indexstr, bs,
> + &child_format, false, &local_err);
> + if (local_err) {
> + ret = -EINVAL;
> goto close_exit;
> }
>
> @@ -949,9 +951,9 @@ close_exit:
> if (!opened[i]) {
> continue;
> }
> - bdrv_unref(s->bs[i]);
> + bdrv_unref_child(bs, s->children[i]);
> }
> - g_free(s->bs);
> + g_free(s->children);
> g_free(opened);
> exit:
> qemu_opts_del(opts);
> @@ -968,10 +970,10 @@ static void quorum_close(BlockDriverState *bs)
> int i;
>
> for (i = 0; i < s->num_children; i++) {
> - bdrv_unref(s->bs[i]);
> + bdrv_unref_child(bs, s->children[i]);
> }
>
> - g_free(s->bs);
> + g_free(s->children);
> }
>
> static void quorum_detach_aio_context(BlockDriverState *bs)
> @@ -980,7 +982,7 @@ static void quorum_detach_aio_context(BlockDriverState
> *bs)
> int i;
>
> for (i = 0; i < s->num_children; i++) {
> - bdrv_detach_aio_context(s->bs[i]);
> + bdrv_detach_aio_context(s->children[i]->bs);
> }
> }
>
> @@ -991,7 +993,7 @@ static void quorum_attach_aio_context(BlockDriverState
> *bs,
> int i;
>
> for (i = 0; i < s->num_children; i++) {
> - bdrv_attach_aio_context(s->bs[i], new_context);
> + bdrv_attach_aio_context(s->children[i]->bs, new_context);
> }
> }
>
> @@ -1003,16 +1005,17 @@ static void quorum_refresh_filename(BlockDriverState
> *bs)
> int i;
>
> for (i = 0; i < s->num_children; i++) {
> - bdrv_refresh_filename(s->bs[i]);
> - if (!s->bs[i]->full_open_options) {
> + bdrv_refresh_filename(s->children[i]->bs);
> + if (!s->children[i]->bs->full_open_options) {
> return;
> }
> }
>
> children = qlist_new();
> for (i = 0; i < s->num_children; i++) {
> - QINCREF(s->bs[i]->full_open_options);
> - qlist_append_obj(children, QOBJECT(s->bs[i]->full_open_options));
> + QINCREF(s->children[i]->bs->full_open_options);
> + qlist_append_obj(children,
> + QOBJECT(s->children[i]->bs->full_open_options));
> }
>
> opts = qdict_new();
> --
> 1.8.3.1
>
Reviewed-by: Jeff Cody <address@hidden>
- [Qemu-devel] [PATCH v3 00/16] block: Get rid of bdrv_swap(), Kevin Wolf, 2015/10/09
- [Qemu-devel] [PATCH v3 06/16] block: Remove bdrv_open_image(), Kevin Wolf, 2015/10/09
- [Qemu-devel] [PATCH v3 05/16] block: Convert bs->file to BdrvChild, Kevin Wolf, 2015/10/09
- [Qemu-devel] [PATCH v3 03/16] blkverify: Convert s->test_file to BdrvChild, Kevin Wolf, 2015/10/09
- [Qemu-devel] [PATCH v3 04/16] quorum: Convert to BdrvChild, Kevin Wolf, 2015/10/09
- Re: [Qemu-devel] [PATCH v3 04/16] quorum: Convert to BdrvChild,
Jeff Cody <=
- [Qemu-devel] [PATCH v3 09/16] block: Split bdrv_move_feature_fields(), Kevin Wolf, 2015/10/09
- [Qemu-devel] [PATCH v3 12/16] block: Introduce parents list, Kevin Wolf, 2015/10/09
- [Qemu-devel] [PATCH v3 13/16] block: Implement bdrv_append() without bdrv_swap(), Kevin Wolf, 2015/10/09
- [Qemu-devel] [PATCH v3 01/16] block: Introduce BDS.file_child, Kevin Wolf, 2015/10/09
- [Qemu-devel] [PATCH v3 10/16] block/io: Make bdrv_requests_pending() public, Kevin Wolf, 2015/10/09