[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v3 2/2] block: Make bdrv_root_attach_child() unr
From: |
Max Reitz |
Subject: |
Re: [Qemu-devel] [PATCH v3 2/2] block: Make bdrv_root_attach_child() unref child_bs on failure |
Date: |
Mon, 13 May 2019 16:31:16 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 |
On 13.05.19 15:46, Alberto Garcia wrote:
> A consequence of the previous patch is that bdrv_attach_child()
> transfers the reference to child_bs from the caller to parent_bs,
> which will drop it on bdrv_close() or when someone calls
> bdrv_unref_child().
>
> But this only happens when bdrv_attach_child() succeeds. If it fails
> then the caller is responsible for dropping the reference to child_bs.
>
> This patch makes bdrv_attach_child() take the reference also when
> there is an error, freeing the caller for having to do it.
>
> A similar situation happens with bdrv_root_attach_child(), so the
> changes on this patch affect both functions.
>
> Signed-off-by: Alberto Garcia <address@hidden>
> ---
> block.c | 25 +++++++++++++++++--------
> block/block-backend.c | 3 +--
> block/quorum.c | 1 -
> blockjob.c | 2 +-
> 4 files changed, 19 insertions(+), 12 deletions(-)
>
> diff --git a/block.c b/block.c
> index 3c3bd0f8d2..df727314ff 100644
> --- a/block.c
> +++ b/block.c
[...]
> @@ -2569,10 +2582,6 @@ BdrvChild *bdrv_open_child(const char *filename,
> }
>
> c = bdrv_attach_child(parent, bs, bdref_key, child_role, errp);
> - if (!c) {
> - bdrv_unref(bs);
> - return NULL;
> - }
>
> return c;
> }
(That could have been simplified even further. *shrug*)
signature.asc
Description: OpenPGP digital signature