[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH] add bdrv->create function for host_device
From: |
Nolan |
Subject: |
[Qemu-devel] [PATCH] add bdrv->create function for host_device |
Date: |
Mon, 16 Mar 2009 19:57:45 -0700 |
"qemu-img convert" tries to create the destination image by calling it's
->create function. host_devices do not currently have one, since host
devices are not created like normal images are. A reasonable analog of
create for host devices is verifying that they have the appropriate
properties.
This patch adds that verification.
It also fixes a typo that caused qemu-img to print the wrong device type
in the error message informing the user that the destination device did
not support creation.
Signed-off-by: Nolan Leake <nolan <at> sigbus.net>
Index: block-raw-posix.c
===================================================================
--- block-raw-posix.c (revision 6718)
+++ block-raw-posix.c (working copy)
@@ -1132,6 +1132,32 @@
return ioctl(s->fd, req, buf);
}
+
+static int hdev_create(const char *filename, int64_t total_size,
+ const char *backing_file, int flags)
+{
+ int fd;
+ int ret = 0;
+ struct stat stat_buf;
+
+ if (flags || backing_file)
+ return -ENOTSUP;
+
+ fd = open(filename, O_WRONLY | O_BINARY);
+ if (fd < 0)
+ return -EIO;
+
+ if (fstat(fd, &stat_buf) < 0)
+ ret = -EIO;
+ else if (!S_ISBLK(stat_buf.st_mode))
+ ret = -EIO;
+ else if (lseek(fd, 0, SEEK_END) < total_size * 512)
+ ret = -ENOSPC;
+
+ close(fd);
+ return ret;
+}
+
#else
static int fd_open(BlockDriverState *bs)
@@ -1163,6 +1189,12 @@
{
return -ENOTSUP;
}
+
+static int hdev_create(const char *filename, int64_t total_size,
+ const char *backing_file, int flags)
+{
+ return -ENOTSUP;
+}
#endif /* !linux */
BlockDriver bdrv_host_device = {
@@ -1173,7 +1205,7 @@
NULL,
NULL,
raw_close,
- NULL,
+ hdev_create,
raw_flush,
#ifdef CONFIG_AIO
Index: qemu-img.c
===================================================================
--- qemu-img.c (revision 6718)
+++ qemu-img.c (working copy)
@@ -477,7 +477,7 @@
ret = bdrv_create(drv, out_filename, total_sectors, out_baseimg, flags);
if (ret < 0) {
if (ret == -ENOTSUP) {
- error("Formatting not supported for file format '%s'", fmt);
+ error("Formatting not supported for file format '%s'", out_fmt);
} else {
error("Error while formatting '%s'", out_filename);
}
- [Qemu-devel] [PATCH] add bdrv->create function for host_device,
Nolan <=