qemu-devel
[Top][All Lists]
Advanced

[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);
         }






reply via email to

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