From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57378) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZWbuU-00049Y-Bb for qemu-devel@nongnu.org; Mon, 31 Aug 2015 23:06:59 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZWbuT-0004KX-By for qemu-devel@nongnu.org; Mon, 31 Aug 2015 23:06:58 -0400 References: <1439279489-13338-1-git-send-email-wency@cn.fujitsu.com> <1439279489-13338-4-git-send-email-wency@cn.fujitsu.com> <55E4917A.9010703@redhat.com> From: Wen Congyang Message-ID: <55E51627.40005@cn.fujitsu.com> Date: Tue, 1 Sep 2015 11:06:15 +0800 MIME-Version: 1.0 In-Reply-To: <55E4917A.9010703@redhat.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [Patch for-2.5 v2 3/6] Add new block driver interface to add/delete a BDS's child List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Eric Blake , qemu devel , Markus Armbruster , Alberto Garcia , Stefan Hajnoczi Cc: Kevin Wolf , zhanghailiang , qemu block , Jiang Yunhong , Dong Eddie , "Dr. David Alan Gilbert" , Gonglei , Yang Hongyang On 09/01/2015 01:40 AM, Eric Blake wrote: > On 08/11/2015 01:51 AM, Wen Congyang wrote: >> In some cases, we want to take a quorum child offline, and take >> another child online. >> >> Signed-off-by: Wen Congyang >> Signed-off-by: zhanghailiang >> Signed-off-by: Gonglei >> Reviewed-by: Alberto Garcia >> --- >> block.c | 43 +++++++++++++++++++++++++++++++++++++++++++ >> include/block/block.h | 4 ++++ >> include/block/block_int.h | 5 +++++ >> 3 files changed, 52 insertions(+) >> > >> + * 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 *bs, QDict *options, Error **errp) >> +{ >> + >> + if (!bs->drv || !bs->drv->bdrv_add_child) { >> + error_setg(errp, "The BDS %s doesn't support adding a child", >> + bdrv_get_device_or_node_name(bs)); >> + return; >> + } >> + >> + bs->drv->bdrv_add_child(bs, options, errp); > > Should this also check that bs is not already a child of something? Or > a bit looser, we may want to allow a BDS to be a child of multiple trees > (a common shared backing file), but we still definitely don't want to > allow nonsensical loops such as trying to make a BDS be hot-added as its > own child. > bs is parent, and the child is options, and will be opened by the parent. So there is no need to check it. Thanks Wen Congyang