On Wed, Mar 15, 2017 at 11:29 AM Stefan Hajnoczi
wrote:
> Maximum size calculation is trivial for the raw format: it's just the
> requested image size (because there is no metadata).
>
> Signed-off-by: Stefan Hajnoczi
> ---
> block/raw-format.c | 22 ++
> 1 file changed, 22 insertions(+)
>
> diff --git a/block/raw-format.c b/block/raw-format.c
> index 86fbc65..cc88540 100644
> --- a/block/raw-format.c
> +++ b/block/raw-format.c
> @@ -312,6 +312,27 @@ static int64_t raw_getlength(BlockDriverState *bs)
> return s->size;
> }
>
> +static void raw_measure(QemuOpts *opts, BlockDriverState *in_bs,
> +BlockMeasureInfo *info,
> +Error **errp)
> +{
> +if (in_bs) {
> +int64_t ssize = bdrv_getlength(in_bs);
> +if (ssize < 0) {
> +error_setg_errno(errp, -ssize, "Unable to get image size");
> +return;
> +}
> +info->required_bytes = ssize;
> +} else {
> +info->required_bytes =
> +ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0),
> + BDRV_SECTOR_SIZE);
> +}
> +
> +/* Unallocated sectors count towards the file size in raw images */
> +info->fully_allocated_bytes = info->required_bytes;
> +}
> +
> static int raw_get_info(BlockDriverState *bs, BlockDriverInfo *bdi)
> {
> return bdrv_get_info(bs->file->bs, bdi);
> @@ -477,6 +498,7 @@ BlockDriver bdrv_raw = {
> .bdrv_truncate= &raw_truncate,
> .bdrv_getlength = &raw_getlength,
> .has_variable_length = true,
> +.bdrv_measure = &raw_measure,
> .bdrv_get_info= &raw_get_info,
> .bdrv_refresh_limits = &raw_refresh_limits,
> .bdrv_probe_blocksizes = &raw_probe_blocksizes,
> --
> 2.9.3
>
>
Looks good.
Nir