On 31.03.19 13:17, Alberto Garcia wrote:
> bdrv_unref_child() does the following things:
> 
>   - Updates the child->bs->inherits_from pointer.
>   - Calls bdrv_detach_child() to remove the BdrvChild from bs->children.
>   - Calls bdrv_unref() to unref the child BlockDriverState.
> 
> When bdrv_unref_child() was introduced in commit 33a604075c it was not
> used in bdrv_close() because the drivers that had additional children
> (like quorum or blkverify) had already called bdrv_unref() on their
> children during their own close functions.
> 
> This was changed later (in 0bd6e91a7e for quorum, in 3e586be0b2 for
> blkverify) so there's no reason not to use bdrv_unref_child() in
> bdrv_close() anymore.

Hm.  Sounds reasonable.  But the commit dates are interesting.  The TODO
was introduced in commit 33a604075c51, so actually Kevin wrote that
patch just one day before the patches for vmdk, quorum, and blkverify.
They hit the mailing list two months apart, though (July vs. September
2015).

But still I wonder whether there was really no other reason nobody
resolved this TODO until now.

Hm.  Perhaps because it looks like we want to keep the children list
central to the block layer so no block driver would have to ever even
call bdrv_unref_child().  But that sounds overly complicated for no
gain; and as long as e.g. quorum has the children list in its own state
object, it should unref all children when it deletes the list, because
that's the right thing to do.

So, yeah, I'm a bit wary, but I can't see why not.

> After this there's also no need to remove bs->backing and bs->file
> separately from the rest of the children, so bdrv_close() can be
> simplified.
> 
> Signed-off-by: Alberto Garcia <be...@igalia.com>
> ---
>  block.c | 16 +++-------------
>  1 file changed, 3 insertions(+), 13 deletions(-)

Thanks, applied to my block branch:

https://git.xanclic.moe/XanClic/qemu/commits/branch/block

Max

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to