[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>
- [Qemu-devel] [PATCH 0/6] block: Several fixes, Max Reitz, 2014/04/29
- [Qemu-devel] [PATCH 1/6] qcow2: Avoid overflow in alloc_clusters_noref(), Max Reitz, 2014/04/29
- [Qemu-devel] [PATCH 2/6] block: Use correct width in format strings, Max Reitz, 2014/04/29
- [Qemu-devel] [PATCH 3/6] qcow2: Catch bdrv_getlength() error, Max Reitz, 2014/04/29
- [Qemu-devel] [PATCH 4/6] qcow2: Check min_size in qcow2_grow_l1_table(), Max Reitz, 2014/04/29
- [Qemu-devel] [PATCH 5/6] block/bochs: Fix error handling for seek_to_sector(), Max Reitz, 2014/04/29
- [Qemu-devel] [PATCH 6/6] block/vdi: Error out immediately in vdi_create(), Max Reitz, 2014/04/29
- Re: [Qemu-devel] [PATCH 6/6] block/vdi: Error out immediately in vdi_create(),
Stefan Weil <=
- Re: [Qemu-devel] [PATCH 0/6] block: Several fixes, Kevin Wolf, 2014/04/30