[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 6/6] block/vdi: Error out immediately in vdi_create(
From: |
Max Reitz |
Subject: |
[Qemu-devel] [PATCH 6/6] block/vdi: Error out immediately in vdi_create() |
Date: |
Tue, 29 Apr 2014 19:03:16 +0200 |
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) {
result = -errno;
}
--
1.9.2
- [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 <=
- Re: [Qemu-devel] [PATCH 0/6] block: Several fixes, Kevin Wolf, 2014/04/30