On Wed, Nov 13, 2013 at 08:37:58PM +0100, Max Reitz wrote:
> If a block device is unbacked, a streaming blockjob should immediately
> finish instead of beginning to try to stream, then noticing the backing
> file does not contain even the first sector (since it does not exist)
> and then finishing normally.
> 
> Signed-off-by: Max Reitz <mre...@redhat.com>
> ---
>  block/stream.c | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/block/stream.c b/block/stream.c
> index 694fd42..46bec7d 100644
> --- a/block/stream.c
> +++ b/block/stream.c
> @@ -88,6 +88,11 @@ static void coroutine_fn stream_run(void *opaque)
>      int n = 0;
>      void *buf;
>  
> +    if (!bs->backing_hd) {
> +        block_job_completed(&s->common, 0);
> +        return;
> +    }
> +

Thanks for raising this, it's a bug that we don't verify that the image
has a backing file.

I'd rather return an error that the user attempted to do something
pointless.  It was a mistake on their part and it helps to bring this to
their attention right away.

CCing Eric Blake because strictly speaking, adding a error where we
previously used to return success breaks API compatibility.  Any
suggestions (I guess QEMU could just log a warning instead of failing
the command)?

Stefan

Reply via email to