From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37628) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZZEvU-00027I-Ur for qemu-devel@nongnu.org; Tue, 08 Sep 2015 05:10:54 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZZEvT-0001JK-E7 for qemu-devel@nongnu.org; Tue, 08 Sep 2015 05:10:52 -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> <55E4F4FF.1000504@cn.fujitsu.com> <55E5C4B0.1080301@redhat.com> From: Wen Congyang Message-ID: <55EEA5FE.2000507@cn.fujitsu.com> Date: Tue, 8 Sep 2015 17:10:22 +0800 MIME-Version: 1.0 In-Reply-To: <55E5C4B0.1080301@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 11:30 PM, Eric Blake wrote: > On 08/31/2015 06:44 PM, Wen Congyang wrote: > >>> >>>> + * 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. >>> >> >> hot-added BDS is a new BDS, but it is OK to check it here. I will update it >> in the next version. > > Design-wise, I think we really want to have the add-child operation be > handed a pre-opened BDS, rather than the options dictionary to open the > BDS itself. That is, we should use the existing blockdev-add (and > enhance it to support everything) to open the BDS, and then this command > should just attach that BDS as the new child (which is why it IS > important that we validate that the new BDS being added doesn't create > an invalid loop). > How to check it? The parent BDS can get all children. But the child doesn't know if it is some BDS's child. Thanks Wen Congyang