qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 6/6] block/vdi: Error out immediately in vdi_cre


From: Stefan Weil
Subject: Re: [Qemu-devel] [PATCH 6/6] block/vdi: Error out immediately in vdi_create()
Date: Tue, 29 Apr 2014 19:52:19 +0200
User-agent: Mozilla/5.0 (X11; Linux i686; rv:24.0) Gecko/20100101 Thunderbird/24.4.0

Am 29.04.2014 19:03, schrieb Max Reitz:
> Currently, if an error occurs during the part of vdi_create() which
> actually writes the image, the function stores -errno, but continues
> anyway.
> 
> Instead of trying to write data which (if it can be written at all) does
> not make any sense without the operations before succeeding (e.g.,
> writing the image header), just error out immediately.
> 
> Signed-off-by: Max Reitz <address@hidden>
> ---
>  block/vdi.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/block/vdi.c b/block/vdi.c
> index 81faa25..27737af 100644
> --- a/block/vdi.c
> +++ b/block/vdi.c
> @@ -756,6 +756,7 @@ static int vdi_create(const char *filename, 
> QEMUOptionParameter *options,
>      vdi_header_to_le(&header);
>      if (write(fd, &header, sizeof(header)) < 0) {
>          result = -errno;
> +        goto close_and_exit;
>      }
>  
>      if (bmap_size > 0) {
> @@ -769,6 +770,8 @@ static int vdi_create(const char *filename, 
> QEMUOptionParameter *options,
>          }
>          if (write(fd, bmap, bmap_size) < 0) {
>              result = -errno;
> +            g_free(bmap);
> +            goto close_and_exit;
>          }
>          g_free(bmap);
>      }
> @@ -776,10 +779,12 @@ static int vdi_create(const char *filename, 
> QEMUOptionParameter *options,
>      if (image_type == VDI_TYPE_STATIC) {
>          if (ftruncate(fd, sizeof(header) + bmap_size + blocks * block_size)) 
> {
>              result = -errno;
> +            goto close_and_exit;
>          }
>      }
>  
> -    if (close(fd) < 0) {
> +close_and_exit:
> +    if ((close(fd) < 0) && !result) {

I prefer (result == 0) here.

>          result = -errno;
>      }
>  
> 


Reviewed-by: Stefan Weil <address@hidden>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]