On 13.06.19 00:09, Max Reitz wrote:
> Signed-off-by: Max Reitz <mre...@redhat.com>
> ---
>  block.c | 26 ++++++++++++++++++++++++--
>  1 file changed, 24 insertions(+), 2 deletions(-)
> 
> diff --git a/block.c b/block.c
> index 11b7ba8cf6..856d9b58be 100644
> --- a/block.c
> +++ b/block.c
> @@ -4511,15 +4511,37 @@ exit:
>  int64_t bdrv_get_allocated_file_size(BlockDriverState *bs)
>  {
>      BlockDriver *drv = bs->drv;
> +    BlockDriverState *storage_bs, *metadata_bs;
> +
>      if (!drv) {
>          return -ENOMEDIUM;
>      }
> +
>      if (drv->bdrv_get_allocated_file_size) {
>          return drv->bdrv_get_allocated_file_size(bs);
>      }
> -    if (bs->file) {
> -        return bdrv_get_allocated_file_size(bs->file->bs);
> +
> +    storage_bs = bdrv_storage_bs(bs);
> +    metadata_bs = bdrv_metadata_bs(bs);
> +
> +    if (storage_bs) {
> +        int64_t data_size, metadata_size = 0;
> +
> +        data_size = bdrv_get_allocated_file_size(storage_bs);
> +        if (data_size < 0) {
> +            return data_size;
> +        }
> +
> +        if (storage_bs != metadata_bs) {

Let this be a lesson to you: If you run all tests, then prepare to send
the series and just change “a minor thing”, you really should rerun the
tests.  Well, I should have, at least.

That should read “if (metadata_bs && storage_bs != metadata_bs) {”.

(Damn.  Why did I only remember to do so literally five minutes after
sending the series?)

Max

> +            metadata_size = bdrv_get_allocated_file_size(metadata_bs);
> +            if (metadata_size < 0) {
> +                return metadata_size;
> +            }
> +        }
> +
> +        return data_size + metadata_size;
>      }
> +
>      return -ENOTSUP;
>  }
>  
> 


Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to