raw-posix: Handle errors in raw_create

In qemu-iotests, some large images are created using qemu-img.

Without checks for errors, qemu-img will just create an
empty image, and later read / write tests will fail.

With the patch, failures during image creation are detected
and reported.

Signed-off-by: Stefan Weil <weil@mail.berlios.de>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
Stefan Weil 2009-07-11 16:43:37 +02:00 committed by Anthony Liguori
parent 09ac35ac31
commit 1e37d05904
1 changed files with 12 additions and 5 deletions

View File

@ -852,6 +852,7 @@ again:
static int raw_create(const char *filename, QEMUOptionParameter *options) static int raw_create(const char *filename, QEMUOptionParameter *options)
{ {
int fd; int fd;
int result = 0;
int64_t total_size = 0; int64_t total_size = 0;
/* Read out options */ /* Read out options */
@ -864,11 +865,17 @@ static int raw_create(const char *filename, QEMUOptionParameter *options)
fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY,
0644); 0644);
if (fd < 0) if (fd < 0) {
return -EIO; result = -errno;
ftruncate(fd, total_size * 512); } else {
close(fd); if (ftruncate(fd, total_size * 512) != 0) {
return 0; result = -errno;
}
if (close(fd) != 0) {
result = -errno;
}
}
return result;
} }
static void raw_flush(BlockDriverState *bs) static void raw_flush(BlockDriverState *bs)