From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: Wen Congyang <wency@cn.fujitsu.com>
Cc: Kevin Wolf <kwolf@redhat.com>, Alberto Garcia <berto@igalia.com>,
zhanghailiang <zhang.zhanghailiang@huawei.com>,
qemu block <qemu-block@nongnu.org>,
Jiang Yunhong <yunhong.jiang@intel.com>,
Dong Eddie <eddie.dong@intel.com>,
qemu devel <qemu-devel@nongnu.org>,
Markus Armbruster <armbru@redhat.com>,
Gonglei <arei.gonglei@huawei.com>,
Stefan Hajnoczi <stefanha@redhat.com>,
Yang Hongyang <yanghy@cn.fujitsu.com>
Subject: Re: [Qemu-devel] [PATCH v5 1/4] Add new block driver interface to add/delete a BDS's child
Date: Wed, 7 Oct 2015 20:00:11 +0100 [thread overview]
Message-ID: <20151007190010.GO2710@work-vm> (raw)
In-Reply-To: <1442907862-21376-2-git-send-email-wency@cn.fujitsu.com>
* Wen Congyang (wency@cn.fujitsu.com) wrote:
> In some cases, we want to take a quorum child offline, and take
> another child online.
Hi,
Have you checked the output of 'info block' after adding/deleting a child?
I'm using one of your older worlds (from a few months ago) and I found I had
to add a
bdrv_refresh_filename(bs);
to get the output of 'info block' to show the new child.
I don't see it in this version.
Dave
>
> Signed-off-by: Wen Congyang <wency@cn.fujitsu.com>
> Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
> Signed-off-by: Gonglei <arei.gonglei@huawei.com>
> Reviewed-by: Eric Blake <eblake@redhat.com>
> ---
> block.c | 50 +++++++++++++++++++++++++++++++++++++++++++++++
> include/block/block.h | 5 +++++
> include/block/block_int.h | 5 +++++
> 3 files changed, 60 insertions(+)
>
> diff --git a/block.c b/block.c
> index e815d73..1b25e43 100644
> --- a/block.c
> +++ b/block.c
> @@ -4265,3 +4265,53 @@ BlockAcctStats *bdrv_get_stats(BlockDriverState *bs)
> {
> return &bs->stats;
> }
> +
> +/*
> + * Hot add/remove a BDS's child. So the user can take a child offline when
> + * it is broken and take a new child online
> + */
> +void bdrv_add_child(BlockDriverState *parent_bs, BlockDriverState *child_bs,
> + Error **errp)
> +{
> +
> + if (!parent_bs->drv || !parent_bs->drv->bdrv_add_child) {
> + error_setg(errp, "The BDS %s doesn't support adding a child",
> + bdrv_get_device_or_node_name(parent_bs));
> + return;
> + }
> +
> + if (!QLIST_EMPTY(&child_bs->parents)) {
> + error_setg(errp, "The BDS %s already has parent",
> + child_bs->node_name);
> + return;
> + }
> +
> + parent_bs->drv->bdrv_add_child(parent_bs, child_bs, errp);
> +}
> +
> +void bdrv_del_child(BlockDriverState *parent_bs, BlockDriverState *child_bs,
> + Error **errp)
> +{
> + BdrvChild *child;
> +
> + if (!parent_bs->drv || !parent_bs->drv->bdrv_del_child) {
> + error_setg(errp, "The BDS %s doesn't support removing a child",
> + bdrv_get_device_or_node_name(parent_bs));
> + return;
> + }
> +
> + QLIST_FOREACH(child, &parent_bs->children, next) {
> + if (child->bs == child_bs) {
> + break;
> + }
> + }
> +
> + if (!child) {
> + error_setg(errp, "BDS %s is not a child of %s",
> + bdrv_get_device_or_node_name(child_bs),
> + bdrv_get_device_or_node_name(parent_bs));
> + return;
> + }
> +
> + parent_bs->drv->bdrv_del_child(parent_bs, child_bs, errp);
> +}
> diff --git a/include/block/block.h b/include/block/block.h
> index ef67353..665c56f 100644
> --- a/include/block/block.h
> +++ b/include/block/block.h
> @@ -616,4 +616,9 @@ void bdrv_flush_io_queue(BlockDriverState *bs);
>
> BlockAcctStats *bdrv_get_stats(BlockDriverState *bs);
>
> +void bdrv_add_child(BlockDriverState *parent, BlockDriverState *child,
> + Error **errp);
> +void bdrv_del_child(BlockDriverState *parent, BlockDriverState *child,
> + Error **errp);
> +
> #endif
> diff --git a/include/block/block_int.h b/include/block/block_int.h
> index 2f2c47b..64cbc55 100644
> --- a/include/block/block_int.h
> +++ b/include/block/block_int.h
> @@ -288,6 +288,11 @@ struct BlockDriver {
> */
> int (*bdrv_probe_geometry)(BlockDriverState *bs, HDGeometry *geo);
>
> + void (*bdrv_add_child)(BlockDriverState *parent, BlockDriverState *child,
> + Error **errp);
> + void (*bdrv_del_child)(BlockDriverState *parent, BlockDriverState *child,
> + Error **errp);
> +
> QLIST_ENTRY(BlockDriver) list;
> };
>
> --
> 2.4.3
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
next prev parent reply other threads:[~2015-10-07 19:00 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-22 7:44 [Qemu-devel] [PATCH v5 0/4] qapi: child add/delete support Wen Congyang
2015-09-22 7:44 ` [Qemu-devel] [PATCH v5 1/4] Add new block driver interface to add/delete a BDS's child Wen Congyang
2015-10-07 13:35 ` Alberto Garcia
2015-10-08 2:05 ` Wen Congyang
2015-10-07 18:33 ` [Qemu-devel] [Qemu-block] " Max Reitz
2015-10-08 2:06 ` Wen Congyang
2015-10-07 19:00 ` Dr. David Alan Gilbert [this message]
2015-10-08 2:03 ` [Qemu-devel] " Wen Congyang
2015-10-08 18:44 ` Dr. David Alan Gilbert
2015-09-22 7:44 ` [Qemu-devel] [PATCH v5 2/4] quorum: implement bdrv_add_child() and bdrv_del_child() Wen Congyang
2015-10-07 14:12 ` Alberto Garcia
2015-10-08 2:10 ` Wen Congyang
2015-10-07 18:51 ` [Qemu-devel] [Qemu-block] " Max Reitz
2015-10-08 8:12 ` Alberto Garcia
2015-10-09 15:51 ` Max Reitz
2015-10-12 11:56 ` Alberto Garcia
2015-09-22 7:44 ` [Qemu-devel] [PATCH v5 3/4] qmp: add monitor command to add/remove a child Wen Congyang
2015-10-07 14:33 ` Alberto Garcia
2015-10-07 19:42 ` [Qemu-devel] [Qemu-block] " Max Reitz
2015-10-08 6:15 ` Markus Armbruster
2015-10-08 8:29 ` Alberto Garcia
2015-10-08 10:03 ` Kevin Wolf
2015-10-08 10:13 ` Alberto Garcia
2015-10-09 16:14 ` Max Reitz
2015-10-08 11:02 ` [Qemu-devel] Dynamic reconfiguration (was: qmp: add monitor command to add/remove a child) Kevin Wolf
2015-10-08 11:10 ` [Qemu-devel] [Qemu-block] " Kevin Wolf
2015-10-21 8:27 ` [Qemu-devel] [Qemu-block] Dynamic reconfiguration Markus Armbruster
2015-10-26 2:04 ` Wen Congyang
2015-10-26 7:24 ` Markus Armbruster
2015-10-26 7:25 ` Wen Congyang
2015-10-09 16:13 ` [Qemu-devel] [Qemu-block] [PATCH v5 3/4] qmp: add monitor command to add/remove a child Max Reitz
2015-10-09 16:42 ` Dr. David Alan Gilbert
2015-10-09 18:24 ` Max Reitz
2015-10-12 8:07 ` Dr. David Alan Gilbert
2015-10-12 8:18 ` Kevin Wolf
2015-10-12 7:58 ` Markus Armbruster
2015-10-12 7:56 ` Markus Armbruster
2015-10-12 16:27 ` Max Reitz
2015-09-22 7:44 ` [Qemu-devel] [PATCH v5 4/4] hmp: " Wen Congyang
2015-10-07 14:38 ` Alberto Garcia
2015-09-22 11:15 ` [Qemu-devel] [PATCH v5 0/4] qapi: child add/delete support Dr. David Alan Gilbert
2015-09-23 1:08 ` Wen Congyang
2015-09-23 9:21 ` Dr. David Alan Gilbert
2015-09-23 9:30 ` Wen Congyang
2015-10-07 6:40 ` Wen Congyang
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=20151007190010.GO2710@work-vm \
--to=dgilbert@redhat.com \
--cc=arei.gonglei@huawei.com \
--cc=armbru@redhat.com \
--cc=berto@igalia.com \
--cc=eddie.dong@intel.com \
--cc=kwolf@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
--cc=wency@cn.fujitsu.com \
--cc=yanghy@cn.fujitsu.com \
--cc=yunhong.jiang@intel.com \
--cc=zhang.zhanghailiang@huawei.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.