qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH] add bdrv->create function for host_device


From: Anthony Liguori
Subject: Re: [Qemu-devel] [PATCH] add bdrv->create function for host_device
Date: Thu, 26 Mar 2009 08:11:09 -0500
User-agent: Thunderbird 2.0.0.21 (X11/20090320)

Nolan wrote:
"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;
+}

I'm not quite sure how, but I think you need to have BDRV_O_FILE as a special case. I think probably the easiest thing to do is to bail out if BDRV_O_FILE is set since a physical device cannot be growable.

Regards,

Anthony Liguori







reply via email to

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